code-coordinator 0.5.569__tar.gz → 0.5.570__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.569 → code_coordinator-0.5.570}/PKG-INFO +1 -1
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/drive_queue.py +111 -9
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/drive_queue.py +56 -23
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_drive_queue.py +107 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive.py +16 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_queue.py +181 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/.gitignore +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/CLAUDE.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/GOAL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/LICENSE +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/MANIFEST.in +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/README.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/__init__.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/agent.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/audit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/backup.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/block_log.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/board_service.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/brain.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/claim.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/cli.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/client.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/codegen.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/comments.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/config.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dao.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/db.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/deps.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/drive.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/events.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/filelock.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/freshness.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/gates.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/goal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/context.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/models.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/render.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/health/units.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/hooks.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/interactive.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/models.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/network.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/notify.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/openapi.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/parentage.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/plans.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/progress.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/release_window.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/reports.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/review.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/self_health.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/smoke.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/split_work.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/sql.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/state.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/test_author.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/test_report.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/usage.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/install-agent.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/pyproject.toml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/setup.cfg +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/__init__.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/backends.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/conftest.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_client.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_config.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_db.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_events.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_init.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_models.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_network.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_review.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_session.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_split.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_state.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.569 → code_coordinator-0.5.570}/tests/write_parity.py +0 -0
|
@@ -485,6 +485,7 @@ def drive_queue_add(
|
|
|
485
485
|
# kind is happening on that path. Merging (or fixing forward) a
|
|
486
486
|
# discovered PR is deliberately left to the operator — see
|
|
487
487
|
# `existing_pr_relaunch_remedy`'s own docstring.
|
|
488
|
+
existing_pr_resume_note = ""
|
|
488
489
|
if previous is None or previous.state in STUCK_QUEUE_STATES:
|
|
489
490
|
existing_match = _existing_pr_match(config_path, repo, issue)
|
|
490
491
|
existing_remedy = existing_pr_relaunch_remedy(repo, issue, existing_match)
|
|
@@ -494,6 +495,24 @@ def drive_queue_add(
|
|
|
494
495
|
f"{existing_remedy['what_happens']} Run instead: "
|
|
495
496
|
f"{existing_remedy['command_or_action']}"
|
|
496
497
|
)
|
|
498
|
+
# #3539: `existing_remedy is None` with a real *existing_match* is
|
|
499
|
+
# ambiguous on its own — "no PR found, start fresh" and "PR found,
|
|
500
|
+
# green, but still missing a gate — resume on it" both return
|
|
501
|
+
# `None` from `existing_pr_relaunch_remedy` (see its docstring).
|
|
502
|
+
# Say which one happened: silently queuing a resume with no echo
|
|
503
|
+
# at all would read identically to a fresh `add` and hide the exact
|
|
504
|
+
# trap #3539 reports (an operator with no way to tell this add is
|
|
505
|
+
# about to drive the SAME branch, not a new one).
|
|
506
|
+
if existing_match is not None and existing_match.missing_gates:
|
|
507
|
+
gates_list = " and ".join(existing_match.missing_gates)
|
|
508
|
+
existing_pr_resume_note = (
|
|
509
|
+
f"\nresuming on existing PR #{existing_match.number} "
|
|
510
|
+
f"({existing_match.branch}) — CI is green but {gates_list} "
|
|
511
|
+
f"{'gate is' if len(existing_match.missing_gates) == 1 else 'gates are'} "
|
|
512
|
+
"not yet recorded; this add will dispatch only the missing "
|
|
513
|
+
f"stage(s) on that branch, never a new Work leg (coord "
|
|
514
|
+
f"gates {repo} {issue} shows the live detail)."
|
|
515
|
+
)
|
|
497
516
|
|
|
498
517
|
# #2247: predicted file overlap ORDERS, never refuses. Anything that goes
|
|
499
518
|
# wrong in here (unreadable body, unreachable board, a failed compare)
|
|
@@ -645,6 +664,7 @@ def drive_queue_add(
|
|
|
645
664
|
click.echo(
|
|
646
665
|
f"queued {entry_key(repo, issue)}{pinned}{suffix}{gate}{fix_rounds_note}"
|
|
647
666
|
f"{no_acceptance_note}{scope_downgrade_warning}{overlap_note}"
|
|
667
|
+
f"{existing_pr_resume_note}"
|
|
648
668
|
)
|
|
649
669
|
|
|
650
670
|
# #2339: say out loud when this add cannot possibly accomplish anything —
|
|
@@ -951,15 +971,32 @@ def _existing_pr_match(
|
|
|
951
971
|
answer than `coord.merge_queue.plan()`'s own `PLAN_READY` verdict — it
|
|
952
972
|
reads raw `failed_checks`/`in_flight_checks` only and does not account
|
|
953
973
|
for `merge_queue._ci_checks_are_stale` (a green check that silently
|
|
954
|
-
outlived a base move)
|
|
955
|
-
|
|
956
|
-
--
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
974
|
+
outlived a base move). The issue's own design accepted either condition
|
|
975
|
+
("all green OR `coord merge --plan` reads READY"), and `coord merge
|
|
976
|
+
--only` re-runs its own full gate check before actually merging either
|
|
977
|
+
way, so the worst case from the gap is a confusing round trip
|
|
978
|
+
(recommended here, still BLOCKED there), never an incorrect merge.
|
|
979
|
+
Wiring the fuller verdict in would need this call site to assemble
|
|
980
|
+
`plan()`'s board/GhOps/smoke-verdict inputs for a single PR lookup — a
|
|
981
|
+
bigger, riskier change than this fix-round's scope; left as a known gap
|
|
982
|
+
rather than attempted half-wired.
|
|
983
|
+
|
|
984
|
+
`missing_gates` (#3539), unlike `all_green`, DOES reuse the real gate
|
|
985
|
+
decision — `coord.gates.build_gate_report`, the exact function `coord
|
|
986
|
+
gates` prints and that wraps `coord.merge_queue`'s own
|
|
987
|
+
`requires_review`/`scan_approved_reviews`/`requires_smoke`/
|
|
988
|
+
`evaluate_smoke_verdict` — rather than a second guess, closing the
|
|
989
|
+
quadraui#1109 gap: a PR can be all-green on CI while `coord gates`
|
|
990
|
+
still reports `review`/`test` BLOCKED, and the #2377 guard's old
|
|
991
|
+
"merge it" advice for an all-green PR was then impossible (`coord merge
|
|
992
|
+
--only` itself refused with `enqueue blocked by review gate`). Only
|
|
993
|
+
computed when `all_green` — a red PR's gate state is moot, the caller
|
|
994
|
+
refuses on CI alone either way. Fails open toward "missing" (NEVER
|
|
995
|
+
toward "satisfied"): an unreadable board/config, or a PR whose work
|
|
996
|
+
chain `build_gate_report` can't resolve a decision for, reports every
|
|
997
|
+
gate as still missing rather than claiming a merge is ready when a live
|
|
998
|
+
`coord merge --only` might still refuse it (#2096: unconfirmed success
|
|
999
|
+
is a defect).
|
|
963
1000
|
"""
|
|
964
1001
|
coordinates = _repo_coordinates(config_path, repo)
|
|
965
1002
|
if coordinates is None:
|
|
@@ -990,14 +1027,64 @@ def _existing_pr_match(
|
|
|
990
1027
|
# reported", which `all_green` below already reads as not-green.
|
|
991
1028
|
checks = []
|
|
992
1029
|
all_green = bool(checks) and not failed_checks(checks) and not in_flight_checks(checks)
|
|
1030
|
+
missing_gates = _missing_required_gates(config_path, repo, issue) if all_green else ()
|
|
993
1031
|
return ExistingPrMatch(
|
|
994
1032
|
number=number,
|
|
995
1033
|
branch=str(pr.get("headRefName") or ""),
|
|
996
1034
|
url=str(pr.get("url") or ""),
|
|
997
1035
|
all_green=all_green,
|
|
1036
|
+
missing_gates=missing_gates,
|
|
998
1037
|
)
|
|
999
1038
|
|
|
1000
1039
|
|
|
1040
|
+
def _missing_required_gates(config_path: Path, repo: str, issue: int) -> tuple[str, ...]:
|
|
1041
|
+
"""#3539: which of ``("review", "test")`` are still required-but-not-ok
|
|
1042
|
+
for *repo*#*issue*, per `coord.gates.build_gate_report` — the SAME
|
|
1043
|
+
review/test decision `coord gates` prints and `coord merge` itself
|
|
1044
|
+
gates on (#2096: one question, one answer; never a second, driftable
|
|
1045
|
+
guess at "is this PR actually ready").
|
|
1046
|
+
|
|
1047
|
+
Fails open toward "missing", never toward "satisfied": any read failure
|
|
1048
|
+
(unreadable config, no board, an exception inside `build_gate_report`
|
|
1049
|
+
itself) or a report with no resolved decisions at all (no work-like
|
|
1050
|
+
assignment `build_gate_report` could select a winner from) reports
|
|
1051
|
+
BOTH gates missing. A false "missing" here costs one operator-visible
|
|
1052
|
+
resume note on an add that may turn out to be a no-op once the real
|
|
1053
|
+
gates are read live again a moment later; a false "satisfied" would
|
|
1054
|
+
reproduce the exact #3539 incident — advising ``coord merge --only``
|
|
1055
|
+
over a PR a live merge attempt still refuses.
|
|
1056
|
+
|
|
1057
|
+
The board comes from ``coord.board_service.read_board()``, NOT
|
|
1058
|
+
``coord.state.build_board()`` (#615/#906): `coord drive-queue add` has
|
|
1059
|
+
no whole-command daemon reroute, so a thin client reading the local DB
|
|
1060
|
+
here would see an empty board, resolve no decisions, and fail open to
|
|
1061
|
+
"both gates missing" on every add — technically safe, uselessly noisy.
|
|
1062
|
+
`read_board()` is the one place the local-vs-daemon decision is made
|
|
1063
|
+
(GET /board on a thin client, the local DB otherwise), which is also
|
|
1064
|
+
why no entry is needed in `tests/test_thin_client_board_audit.py`'s
|
|
1065
|
+
``COMMANDS_ALLOWLIST``: there is no direct local-board call site to
|
|
1066
|
+
allowlist.
|
|
1067
|
+
"""
|
|
1068
|
+
try:
|
|
1069
|
+
from coord import github_ops # noqa: PLC0415
|
|
1070
|
+
from coord.board_service import read_board # noqa: PLC0415
|
|
1071
|
+
from coord.commands._common import _load_config # noqa: PLC0415
|
|
1072
|
+
from coord.gates import build_gate_report # noqa: PLC0415
|
|
1073
|
+
|
|
1074
|
+
cfg = _load_config(config_path)
|
|
1075
|
+
board = read_board()
|
|
1076
|
+
report = build_gate_report(board, cfg, repo, issue, gh_ops=github_ops)
|
|
1077
|
+
except (Exception, SystemExit): # noqa: BLE001 — fail-open to "missing"
|
|
1078
|
+
return ("review", "test")
|
|
1079
|
+
by_gate = {d.gate: d for d in report.decisions}
|
|
1080
|
+
missing = []
|
|
1081
|
+
for gate in ("review", "test"):
|
|
1082
|
+
decision = by_gate.get(gate)
|
|
1083
|
+
if decision is None or (decision.required and not decision.ok):
|
|
1084
|
+
missing.append(gate)
|
|
1085
|
+
return tuple(missing)
|
|
1086
|
+
|
|
1087
|
+
|
|
1001
1088
|
def _predict_overlap(
|
|
1002
1089
|
config_path: Path, repo: str, issue: int, existing_entries: list[QueueEntry],
|
|
1003
1090
|
) -> tuple[Prediction, str, str]:
|
|
@@ -6433,6 +6520,17 @@ def _blocked_escalation_command(
|
|
|
6433
6520
|
behaviour) purely so every OTHER existing caller/test of this function
|
|
6434
6521
|
that has no config to hand keeps working unchanged; the real `tick`
|
|
6435
6522
|
call sites below always pass their own.
|
|
6523
|
+
|
|
6524
|
+
#3539: `existing_pr_relaunch_remedy` returning ``None`` is no longer
|
|
6525
|
+
proof that *match* itself is ``None`` — a green PR with Test and/or
|
|
6526
|
+
Review never recorded ALSO returns ``None`` (see that function's own
|
|
6527
|
+
docstring), on purpose, so a plain `add` can resume on it. That case
|
|
6528
|
+
still HAS a PR and HAS been dispatched, so it must not fall through to
|
|
6529
|
+
`_requeue_command`'s blind ``remove && add`` either — remove would
|
|
6530
|
+
discard a completed, green work cycle for no reason. Propose the plain
|
|
6531
|
+
`add` (no `remove` first) instead; `_requeue_command` stays reserved for
|
|
6532
|
+
the one case its own docstring names: *match* itself is ``None``,
|
|
6533
|
+
i.e. nothing was ever dispatched for this row at all.
|
|
6436
6534
|
"""
|
|
6437
6535
|
if is_merge_gate_block_reason(reason):
|
|
6438
6536
|
parsed = parse_key(key)
|
|
@@ -6446,6 +6544,10 @@ def _blocked_escalation_command(
|
|
|
6446
6544
|
remedy = existing_pr_relaunch_remedy(repo, issue, match)
|
|
6447
6545
|
if remedy is not None:
|
|
6448
6546
|
return remedy["command_or_action"]
|
|
6547
|
+
if match is not None:
|
|
6548
|
+
# #3539: green PR, gate(s) not yet recorded — resume via a
|
|
6549
|
+
# plain `add`, never the blind `remove && add` requeue below.
|
|
6550
|
+
return f"coord drive-queue add {repo} {issue}"
|
|
6449
6551
|
return _requeue_command(entry, key)
|
|
6450
6552
|
|
|
6451
6553
|
|
|
@@ -4315,51 +4315,84 @@ class ExistingPrMatch:
|
|
|
4315
4315
|
built it — :func:`coord.commands.drive_queue._existing_pr_match`, the
|
|
4316
4316
|
one place that owns the `gh pr list` + checks read this module stays
|
|
4317
4317
|
pure of.
|
|
4318
|
+
|
|
4319
|
+
*missing_gates* (#3539) is the subset of ``("review", "test")`` that
|
|
4320
|
+
`coord.gates.build_gate_report` — the SAME read `coord gates`/`coord
|
|
4321
|
+
merge` themselves use, never a second guess (#2096: one question, one
|
|
4322
|
+
answer) — reports as still required-but-not-ok for this PR's work
|
|
4323
|
+
chain. Empty by default so every pre-#3539 construction of this
|
|
4324
|
+
dataclass (every existing test that only ever set *all_green*) keeps
|
|
4325
|
+
reading as "fully gated" — i.e. byte-identical old behaviour — without
|
|
4326
|
+
being touched.
|
|
4318
4327
|
"""
|
|
4319
4328
|
|
|
4320
4329
|
number: int
|
|
4321
4330
|
branch: str
|
|
4322
4331
|
url: str
|
|
4323
4332
|
all_green: bool
|
|
4333
|
+
missing_gates: tuple[str, ...] = ()
|
|
4324
4334
|
|
|
4325
4335
|
|
|
4326
4336
|
def existing_pr_relaunch_remedy(
|
|
4327
4337
|
repo: str, issue: int, match: "ExistingPrMatch | None"
|
|
4328
4338
|
) -> dict[str, str] | None:
|
|
4329
|
-
"""#2377: the option (and `drive-queue add` refusal message)
|
|
4330
|
-
recommends INSTEAD OF a blind ``remove && add`` relaunch — or
|
|
4331
|
-
when *match* is ``None`` (
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4339
|
+
"""#2377/#3539: the option (and `drive-queue add` refusal message)
|
|
4340
|
+
*match* recommends INSTEAD OF a blind ``remove && add`` relaunch — or
|
|
4341
|
+
``None`` when *match* is ``None`` (no PR on the conventional branch
|
|
4342
|
+
name(s), start fresh) OR when *match* is green but still carries
|
|
4343
|
+
unrecorded gates (#3539 — see below): both ``None`` shapes mean "let
|
|
4344
|
+
this `add` proceed", not "nothing was found".
|
|
4345
|
+
|
|
4346
|
+
Three shapes:
|
|
4347
|
+
|
|
4348
|
+
* **red / stale checks** — refuse; something else may already be
|
|
4349
|
+
mid-fixing that branch, and a fresh drive launched on top of it is
|
|
4350
|
+
exactly the "at best wasted work, at worst clobbering it mid-flight"
|
|
4351
|
+
risk #2377 opens with.
|
|
4352
|
+
* **green, but Test and/or Review never recorded** (#3539 — the
|
|
4353
|
+
quadraui#1109/PR#1253 incident: CI all green, yet `coord gates`
|
|
4354
|
+
showed both `review` and `test` BLOCKED, and the ``merge it instead``
|
|
4355
|
+
advice below was impossible — `coord merge --only` itself refused
|
|
4356
|
+
with ``enqueue blocked by review gate``). Refusing here would strand
|
|
4357
|
+
the entry with no way to ever collect the missing verdicts. Returning
|
|
4358
|
+
``None`` lets the `add` proceed and the queue's own drive resume on
|
|
4359
|
+
the EXISTING branch — `decide()` only ever dispatches a fresh Work
|
|
4360
|
+
leg when ``state.work_aid`` is unset (see `coord/drive.py`), which it
|
|
4361
|
+
is not here, so this can only ever run the missing stage(s) (Test
|
|
4362
|
+
dispatch, Review dispatch) forward to merge, never restart Work.
|
|
4363
|
+
* **green and every gate already satisfied** — truly done: refuse and
|
|
4364
|
+
point at ``coord merge --only`` instead of relaunching a fresh drive
|
|
4365
|
+
over it. Merging is deliberately NOT done here — surfacing it (or
|
|
4366
|
+
refusing the relaunch) is enough; merging stays a `coord merge`
|
|
4367
|
+
decision.
|
|
4341
4368
|
"""
|
|
4342
4369
|
if match is None:
|
|
4343
4370
|
return None
|
|
4344
4371
|
key = entry_key(repo, issue)
|
|
4345
|
-
if match.all_green:
|
|
4372
|
+
if not match.all_green:
|
|
4346
4373
|
return {
|
|
4347
|
-
"label": "
|
|
4348
|
-
"command_or_action":
|
|
4374
|
+
"label": "Inspect existing PR",
|
|
4375
|
+
"command_or_action": merge_plan_inspect_command(repo),
|
|
4349
4376
|
"what_happens": (
|
|
4350
|
-
f"PR #{match.number} ({match.branch}) already
|
|
4351
|
-
"
|
|
4377
|
+
f"PR #{match.number} ({match.branch}) already exists for "
|
|
4378
|
+
"this entry, but its checks are not all green — fix it "
|
|
4379
|
+
"forward (or confirm by hand it is truly dead) before "
|
|
4352
4380
|
"relaunching a fresh drive over it."
|
|
4353
4381
|
),
|
|
4354
4382
|
}
|
|
4383
|
+
if match.missing_gates:
|
|
4384
|
+
# #3539: deliberately no refusal dict — see the docstring's second
|
|
4385
|
+
# shape. Returning `None` here is the whole fix: it lets `add`
|
|
4386
|
+
# proceed instead of stranding the entry on an impossible "merge
|
|
4387
|
+
# it" when `coord merge --only` would itself refuse.
|
|
4388
|
+
return None
|
|
4355
4389
|
return {
|
|
4356
|
-
"label": "
|
|
4357
|
-
"command_or_action":
|
|
4390
|
+
"label": "Merge existing PR",
|
|
4391
|
+
"command_or_action": f"coord merge --only {key}",
|
|
4358
4392
|
"what_happens": (
|
|
4359
|
-
f"PR #{match.number} ({match.branch}) already
|
|
4360
|
-
"
|
|
4361
|
-
"
|
|
4362
|
-
"drive over it."
|
|
4393
|
+
f"PR #{match.number} ({match.branch}) already carries this "
|
|
4394
|
+
"work with every check green — merge it instead of "
|
|
4395
|
+
"relaunching a fresh drive over it."
|
|
4363
4396
|
),
|
|
4364
4397
|
}
|
|
4365
4398
|
|
|
@@ -921,6 +921,76 @@ def test_add_still_refuses_a_requeue_over_an_already_blocked_entry_with_a_green_
|
|
|
921
921
|
assert f"coord merge --only {REPO}#1753" in result.output
|
|
922
922
|
|
|
923
923
|
|
|
924
|
+
def test_add_accepts_a_requeue_over_a_blocked_entry_with_a_green_pr_missing_gates(
|
|
925
|
+
cli, seed, monkeypatch
|
|
926
|
+
):
|
|
927
|
+
"""#3539's actual end-to-end fix, driven through the real CLI: the exact
|
|
928
|
+
shape `test_add_still_refuses_a_requeue_over_an_already_blocked_entry_
|
|
929
|
+
with_a_green_pr` above pins as a REFUSAL (a `blocked` entry with a green
|
|
930
|
+
matching PR) must now instead be ACCEPTED when that PR's Test and/or
|
|
931
|
+
Review were never recorded — the quadraui#1109/PR#1253 incident: CI
|
|
932
|
+
green, `coord gates` showing both BLOCKED, and the old 'merge it
|
|
933
|
+
instead' advice impossible (`coord merge --only` itself refused). The
|
|
934
|
+
`add` must succeed and print the new resume note naming the PR and the
|
|
935
|
+
still-missing gate(s), never the #2377 refusal exception."""
|
|
936
|
+
from coord.drive_queue import ExistingPrMatch
|
|
937
|
+
|
|
938
|
+
seed(issues={1753: "open"})
|
|
939
|
+
cli("add", REPO, "1753")
|
|
940
|
+
state._update_drive_queue_entry_local(REPO, 1753, state=STATE_BLOCKED)
|
|
941
|
+
|
|
942
|
+
monkeypatch.setattr(
|
|
943
|
+
"coord.commands.drive_queue._existing_pr_match",
|
|
944
|
+
lambda config_path, repo, issue: ExistingPrMatch(
|
|
945
|
+
number=4242,
|
|
946
|
+
branch="issue-1753-some-fix",
|
|
947
|
+
url="https://github.com/example/claude-coordinator/pull/4242",
|
|
948
|
+
all_green=True,
|
|
949
|
+
missing_gates=("review", "test"),
|
|
950
|
+
),
|
|
951
|
+
)
|
|
952
|
+
|
|
953
|
+
result = cli("add", REPO, "1753", "--max-fix-rounds", "3")
|
|
954
|
+
|
|
955
|
+
assert result.exit_code == 0, result.output
|
|
956
|
+
assert "4242" in result.output
|
|
957
|
+
assert "resuming on existing PR #4242" in result.output
|
|
958
|
+
assert "review and test" in result.output
|
|
959
|
+
assert "gates are not yet recorded" in result.output
|
|
960
|
+
assert f"coord gates {REPO} 1753" in result.output
|
|
961
|
+
# Accepted, not refused — never the #2377 merge-it exception text.
|
|
962
|
+
assert f"coord merge --only {REPO}#1753" not in result.output
|
|
963
|
+
assert queued(1753) is not None
|
|
964
|
+
|
|
965
|
+
|
|
966
|
+
def test_add_resume_note_names_a_single_missing_gate_in_the_singular(
|
|
967
|
+
cli, seed, monkeypatch
|
|
968
|
+
):
|
|
969
|
+
"""Same accept path, but only ONE gate missing — the note's wording must
|
|
970
|
+
track the singular/plural split (`existing_pr_resume_note`'s own
|
|
971
|
+
``'gate is' if len(...) == 1 else 'gates are'`` branch)."""
|
|
972
|
+
from coord.drive_queue import ExistingPrMatch
|
|
973
|
+
|
|
974
|
+
seed(issues={1753: "open"})
|
|
975
|
+
|
|
976
|
+
monkeypatch.setattr(
|
|
977
|
+
"coord.commands.drive_queue._existing_pr_match",
|
|
978
|
+
lambda config_path, repo, issue: ExistingPrMatch(
|
|
979
|
+
number=4242,
|
|
980
|
+
branch="issue-1753-some-fix",
|
|
981
|
+
url="https://github.com/example/claude-coordinator/pull/4242",
|
|
982
|
+
all_green=True,
|
|
983
|
+
missing_gates=("test",),
|
|
984
|
+
),
|
|
985
|
+
)
|
|
986
|
+
|
|
987
|
+
result = cli("add", REPO, "1753")
|
|
988
|
+
|
|
989
|
+
assert result.exit_code == 0, result.output
|
|
990
|
+
assert "resuming on existing PR #4242" in result.output
|
|
991
|
+
assert "test gate is not yet recorded" in result.output
|
|
992
|
+
|
|
993
|
+
|
|
924
994
|
def test_blocked_escalation_command_proposes_merge_over_requeue_when_pr_is_green(
|
|
925
995
|
monkeypatch, config_file,
|
|
926
996
|
):
|
|
@@ -986,6 +1056,43 @@ def test_blocked_escalation_command_still_requeues_when_no_pr_matches(
|
|
|
986
1056
|
)
|
|
987
1057
|
|
|
988
1058
|
|
|
1059
|
+
def test_blocked_escalation_command_proposes_a_plain_add_when_pr_is_green_but_ungated(
|
|
1060
|
+
monkeypatch, config_file,
|
|
1061
|
+
):
|
|
1062
|
+
"""#3539's non-blocking follow-up: a green PR whose gates were never
|
|
1063
|
+
recorded makes `existing_pr_relaunch_remedy` return `None` for a REASON
|
|
1064
|
+
other than 'no PR matched' (see that function's own docstring). This
|
|
1065
|
+
call site must not conflate the two `None` shapes and fall through to
|
|
1066
|
+
`_requeue_command`'s blind `remove && add` — that would discard a
|
|
1067
|
+
completed, green work cycle for nothing. It must propose a plain `add`
|
|
1068
|
+
(no `remove` first) instead, same as the #3539 `drive-queue add` fix
|
|
1069
|
+
itself resumes on."""
|
|
1070
|
+
from coord.commands.drive_queue import _blocked_escalation_command
|
|
1071
|
+
from coord.drive_queue import ExistingPrMatch, entry_key
|
|
1072
|
+
|
|
1073
|
+
monkeypatch.setattr(
|
|
1074
|
+
"coord.commands.drive_queue._existing_pr_match",
|
|
1075
|
+
lambda config_path, repo, issue: ExistingPrMatch(
|
|
1076
|
+
number=1253,
|
|
1077
|
+
branch="issue-1109-fix",
|
|
1078
|
+
url="https://github.com/example/quadraui/pull/1253",
|
|
1079
|
+
all_green=True,
|
|
1080
|
+
missing_gates=("review", "test"),
|
|
1081
|
+
),
|
|
1082
|
+
)
|
|
1083
|
+
reason = (
|
|
1084
|
+
"work adv-1 exited ADVISORY with no commits on its branch "
|
|
1085
|
+
"(3/3 attempts) — nothing was pushed, so there is nothing to test, "
|
|
1086
|
+
"review, or merge, and retrying has not produced a different outcome."
|
|
1087
|
+
)
|
|
1088
|
+
key = entry_key(OTHER_REPO, 1109)
|
|
1089
|
+
|
|
1090
|
+
command = _blocked_escalation_command(None, key, reason, config_path=config_file)
|
|
1091
|
+
|
|
1092
|
+
assert command == f"coord drive-queue add {OTHER_REPO} 1109"
|
|
1093
|
+
assert "remove" not in command
|
|
1094
|
+
|
|
1095
|
+
|
|
989
1096
|
def test_a_declared_file_is_checked_against_a_live_branchs_real_diff(
|
|
990
1097
|
cli, declare, seed, branch_diff,
|
|
991
1098
|
):
|
|
@@ -2977,6 +2977,22 @@ def test_no_test_verdict_yet_waits_for_coord_to_dispatch_the_stage():
|
|
|
2977
2977
|
assert action.command == ()
|
|
2978
2978
|
|
|
2979
2979
|
|
|
2980
|
+
def test_resuming_on_an_existing_pr_with_no_test_or_review_recorded_never_redispatches_work():
|
|
2981
|
+
"""#3539: the exact quadraui#1109/PR#1253 shape, pinned at `decide()`
|
|
2982
|
+
itself — a `coord drive-queue add` the #2377/#3539 guard now ACCEPTS
|
|
2983
|
+
(CI green, but neither Test nor Review ever recorded) resumes by
|
|
2984
|
+
launching `coord drive` on this same (repo, issue) again. The guard's
|
|
2985
|
+
whole premise that this can only ever run the missing stage(s) forward,
|
|
2986
|
+
never restart Work, rests on `decide()` branching on `state.work_aid`
|
|
2987
|
+
alone (see its own `if not state.work_aid:` dispatch-work arm) — this
|
|
2988
|
+
pins that: a `work_aid`-bearing, branch-bearing, `done` state with BOTH
|
|
2989
|
+
gates unrecorded must wait for the Test stage, never re-dispatch Work."""
|
|
2990
|
+
action = step(done_work(work_test_state=""))
|
|
2991
|
+
assert action.kind == WAIT
|
|
2992
|
+
assert action.command == ()
|
|
2993
|
+
assert not action.label.startswith("WORK:")
|
|
2994
|
+
|
|
2995
|
+
|
|
2980
2996
|
def test_skip_test_records_the_verdict_through_the_test_cli():
|
|
2981
2997
|
"""The CLI, never record_test_verdict() — see #1384."""
|
|
2982
2998
|
action = step(done_work(), DriveOptions(machine="precision", skip_test=True))
|
|
@@ -15,6 +15,8 @@ most attention here are the ones that caused real incidents:
|
|
|
15
15
|
|
|
16
16
|
from __future__ import annotations
|
|
17
17
|
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
18
20
|
import pytest
|
|
19
21
|
|
|
20
22
|
from coord.drive_queue import (
|
|
@@ -7514,6 +7516,185 @@ def test_existing_pr_relaunch_remedy_refuses_the_relaunch_even_when_red():
|
|
|
7514
7516
|
assert remedy["command_or_action"] == merge_plan_inspect_command(REPO)
|
|
7515
7517
|
|
|
7516
7518
|
|
|
7519
|
+
# ── #3539: green PR, but Test and/or Review never recorded ─────────────────
|
|
7520
|
+
#
|
|
7521
|
+
# The live incident: quadraui#1109 (PR #1253) had its Test stage dead-end on
|
|
7522
|
+
# an unrelated capability-probe failure, a `coord fix` worker then repaired
|
|
7523
|
+
# the PR's only red CI job, and once every check went green the #2377 guard
|
|
7524
|
+
# refused the re-add with "merge it instead" — but `coord gates` showed BOTH
|
|
7525
|
+
# `review` and `test` BLOCKED, and `coord merge --only` itself refused with
|
|
7526
|
+
# "enqueue blocked by review gate". The guard must tell these two "green"
|
|
7527
|
+
# shapes apart.
|
|
7528
|
+
|
|
7529
|
+
|
|
7530
|
+
def test_existing_pr_relaunch_remedy_recommends_merging_a_fully_gated_green_pr():
|
|
7531
|
+
"""Unchanged #2377 behaviour, now spelled out explicitly for the shape
|
|
7532
|
+
`missing_gates` is empty on: every required gate already satisfied —
|
|
7533
|
+
still refuse, still "merge it"."""
|
|
7534
|
+
match = ExistingPrMatch(
|
|
7535
|
+
number=1253, branch="issue-1109-fix",
|
|
7536
|
+
url="https://github.com/example/quadraui/pull/1253",
|
|
7537
|
+
all_green=True,
|
|
7538
|
+
missing_gates=(),
|
|
7539
|
+
)
|
|
7540
|
+
remedy = existing_pr_relaunch_remedy("quadraui", 1109, match)
|
|
7541
|
+
assert remedy is not None
|
|
7542
|
+
assert remedy["command_or_action"] == "coord merge --only quadraui#1109"
|
|
7543
|
+
assert "1253" in remedy["what_happens"]
|
|
7544
|
+
|
|
7545
|
+
|
|
7546
|
+
def test_existing_pr_relaunch_remedy_accepts_a_green_pr_missing_both_gates():
|
|
7547
|
+
"""#3539's actual fix: CI green, but review AND test were never
|
|
7548
|
+
recorded — `None` (accept the `add`, resume on the existing branch),
|
|
7549
|
+
never the impossible "merge it" advice."""
|
|
7550
|
+
match = ExistingPrMatch(
|
|
7551
|
+
number=1253, branch="issue-1109-fix",
|
|
7552
|
+
url="https://github.com/example/quadraui/pull/1253",
|
|
7553
|
+
all_green=True,
|
|
7554
|
+
missing_gates=("review", "test"),
|
|
7555
|
+
)
|
|
7556
|
+
assert existing_pr_relaunch_remedy("quadraui", 1109, match) is None
|
|
7557
|
+
|
|
7558
|
+
|
|
7559
|
+
def test_existing_pr_relaunch_remedy_accepts_a_green_pr_missing_one_gate():
|
|
7560
|
+
"""Same fix, the partial shape — only ONE gate missing (e.g. review
|
|
7561
|
+
approved, test never dispatched) is still "accept", not "merge it"."""
|
|
7562
|
+
match = ExistingPrMatch(
|
|
7563
|
+
number=1253, branch="issue-1109-fix",
|
|
7564
|
+
url="https://github.com/example/quadraui/pull/1253",
|
|
7565
|
+
all_green=True,
|
|
7566
|
+
missing_gates=("test",),
|
|
7567
|
+
)
|
|
7568
|
+
assert existing_pr_relaunch_remedy("quadraui", 1109, match) is None
|
|
7569
|
+
|
|
7570
|
+
|
|
7571
|
+
def test_existing_pr_relaunch_remedy_still_refuses_fix_forward_when_red_with_missing_gates():
|
|
7572
|
+
"""A red PR is refused on CI alone, same as before #3539 — missing
|
|
7573
|
+
gates are moot (and, realistically, implied) when checks are not even
|
|
7574
|
+
green yet. `missing_gates` is populated here to prove the red-check
|
|
7575
|
+
branch is checked FIRST and never looks at it."""
|
|
7576
|
+
match = ExistingPrMatch(
|
|
7577
|
+
number=1253, branch="issue-1109-fix",
|
|
7578
|
+
url="https://github.com/example/quadraui/pull/1253",
|
|
7579
|
+
all_green=False,
|
|
7580
|
+
missing_gates=("review", "test"),
|
|
7581
|
+
)
|
|
7582
|
+
remedy = existing_pr_relaunch_remedy("quadraui", 1109, match)
|
|
7583
|
+
assert remedy is not None
|
|
7584
|
+
assert "coord merge --only" not in remedy["command_or_action"]
|
|
7585
|
+
assert remedy["command_or_action"] == merge_plan_inspect_command("quadraui")
|
|
7586
|
+
|
|
7587
|
+
|
|
7588
|
+
# ── #3539: `_missing_required_gates` — the live read `_existing_pr_match`
|
|
7589
|
+
# feeds `missing_gates` from, pinned directly since it is the one place
|
|
7590
|
+
# that reuses `coord.gates.build_gate_report` (#2096: one question, one
|
|
7591
|
+
# answer) rather than a second, driftable guess at gate state. ───────────
|
|
7592
|
+
|
|
7593
|
+
|
|
7594
|
+
def test_missing_required_gates_reports_only_the_unsatisfied_gate(monkeypatch):
|
|
7595
|
+
from coord.commands.drive_queue import _missing_required_gates
|
|
7596
|
+
from coord.gates import GateDecision, GateReport
|
|
7597
|
+
|
|
7598
|
+
report = GateReport(repo_name="quadraui", issue_number=1109)
|
|
7599
|
+
report.decisions = [
|
|
7600
|
+
GateDecision(gate="review", required=True, ok=False, reason="review required but not approved"),
|
|
7601
|
+
GateDecision(gate="test", required=True, ok=True),
|
|
7602
|
+
]
|
|
7603
|
+
monkeypatch.setattr("coord.gates.build_gate_report", lambda *a, **k: report)
|
|
7604
|
+
monkeypatch.setattr("coord.commands._common._load_config", lambda *a, **k: object())
|
|
7605
|
+
monkeypatch.setattr("coord.board_service.read_board", lambda *a, **k: object())
|
|
7606
|
+
|
|
7607
|
+
assert _missing_required_gates(Path("/dev/null"), "quadraui", 1109) == ("review",)
|
|
7608
|
+
|
|
7609
|
+
|
|
7610
|
+
def test_missing_required_gates_empty_when_both_satisfied(monkeypatch):
|
|
7611
|
+
from coord.commands.drive_queue import _missing_required_gates
|
|
7612
|
+
from coord.gates import GateDecision, GateReport
|
|
7613
|
+
|
|
7614
|
+
report = GateReport(repo_name="quadraui", issue_number=1109)
|
|
7615
|
+
report.decisions = [
|
|
7616
|
+
GateDecision(gate="review", required=True, ok=True),
|
|
7617
|
+
GateDecision(gate="test", required=False, ok=True),
|
|
7618
|
+
]
|
|
7619
|
+
monkeypatch.setattr("coord.gates.build_gate_report", lambda *a, **k: report)
|
|
7620
|
+
monkeypatch.setattr("coord.commands._common._load_config", lambda *a, **k: object())
|
|
7621
|
+
monkeypatch.setattr("coord.board_service.read_board", lambda *a, **k: object())
|
|
7622
|
+
|
|
7623
|
+
assert _missing_required_gates(Path("/dev/null"), "quadraui", 1109) == ()
|
|
7624
|
+
|
|
7625
|
+
|
|
7626
|
+
def test_missing_required_gates_fails_open_to_missing_on_a_read_error(monkeypatch):
|
|
7627
|
+
"""#2096: a read that cannot confirm the gate is satisfied must never
|
|
7628
|
+
report it as satisfied — an exception anywhere in the live read (here:
|
|
7629
|
+
`build_gate_report` itself blowing up) reports BOTH gates missing, the
|
|
7630
|
+
safe default, never `()`."""
|
|
7631
|
+
from coord.commands.drive_queue import _missing_required_gates
|
|
7632
|
+
|
|
7633
|
+
def _boom(*a, **k):
|
|
7634
|
+
raise RuntimeError("gh unreachable")
|
|
7635
|
+
|
|
7636
|
+
monkeypatch.setattr("coord.gates.build_gate_report", _boom)
|
|
7637
|
+
monkeypatch.setattr("coord.commands._common._load_config", lambda *a, **k: object())
|
|
7638
|
+
monkeypatch.setattr("coord.board_service.read_board", lambda *a, **k: object())
|
|
7639
|
+
|
|
7640
|
+
assert _missing_required_gates(Path("/dev/null"), "quadraui", 1109) == ("review", "test")
|
|
7641
|
+
|
|
7642
|
+
|
|
7643
|
+
def test_missing_required_gates_fails_open_when_no_decision_could_be_resolved(monkeypatch):
|
|
7644
|
+
"""A report with no resolved decisions at all (e.g. no work-like
|
|
7645
|
+
assignment `build_gate_report` could select a winner from) is "unknown",
|
|
7646
|
+
never "satisfied" — same fail-open default as a hard read error."""
|
|
7647
|
+
from coord.commands.drive_queue import _missing_required_gates
|
|
7648
|
+
from coord.gates import GateReport
|
|
7649
|
+
|
|
7650
|
+
report = GateReport(repo_name="quadraui", issue_number=1109)
|
|
7651
|
+
report.notes = ["no assignments found on the board for quadraui#1109"]
|
|
7652
|
+
monkeypatch.setattr("coord.gates.build_gate_report", lambda *a, **k: report)
|
|
7653
|
+
monkeypatch.setattr("coord.commands._common._load_config", lambda *a, **k: object())
|
|
7654
|
+
monkeypatch.setattr("coord.board_service.read_board", lambda *a, **k: object())
|
|
7655
|
+
|
|
7656
|
+
assert _missing_required_gates(Path("/dev/null"), "quadraui", 1109) == ("review", "test")
|
|
7657
|
+
|
|
7658
|
+
|
|
7659
|
+
def test_missing_required_gates_reads_the_board_through_the_daemon_aware_seam(monkeypatch):
|
|
7660
|
+
"""#615/#906: `coord drive-queue add` has no whole-command daemon
|
|
7661
|
+
reroute, so this gate read must go through
|
|
7662
|
+
`coord.board_service.read_board()` (GET /board on a thin client) and
|
|
7663
|
+
never `coord.state.build_board()` directly — a thin client reading the
|
|
7664
|
+
local DB would see an empty board and fail open to "both gates missing"
|
|
7665
|
+
on every add. Pinned by making the local read EXPLODE: a regression back
|
|
7666
|
+
to `build_board()` is swallowed by the fail-open `except` and shows up
|
|
7667
|
+
here as ("review", "test") instead of the real ().
|
|
7668
|
+
"""
|
|
7669
|
+
from coord.commands.drive_queue import _missing_required_gates
|
|
7670
|
+
from coord.gates import GateDecision, GateReport
|
|
7671
|
+
|
|
7672
|
+
sentinel_board = object()
|
|
7673
|
+
seen: list[object] = []
|
|
7674
|
+
|
|
7675
|
+
report = GateReport(repo_name="quadraui", issue_number=1109)
|
|
7676
|
+
report.decisions = [
|
|
7677
|
+
GateDecision(gate="review", required=True, ok=True),
|
|
7678
|
+
GateDecision(gate="test", required=True, ok=True),
|
|
7679
|
+
]
|
|
7680
|
+
|
|
7681
|
+
def _build_gate_report(board, *a, **k):
|
|
7682
|
+
seen.append(board)
|
|
7683
|
+
return report
|
|
7684
|
+
|
|
7685
|
+
def _local_board_is_forbidden(*a, **k):
|
|
7686
|
+
raise AssertionError("read the local board instead of board_service.read_board()")
|
|
7687
|
+
|
|
7688
|
+
monkeypatch.setattr("coord.gates.build_gate_report", _build_gate_report)
|
|
7689
|
+
monkeypatch.setattr("coord.commands._common._load_config", lambda *a, **k: object())
|
|
7690
|
+
monkeypatch.setattr("coord.board_service.read_board", lambda *a, **k: sentinel_board)
|
|
7691
|
+
monkeypatch.setattr("coord.state.build_board", _local_board_is_forbidden)
|
|
7692
|
+
monkeypatch.setattr("coord.state.load_board", _local_board_is_forbidden)
|
|
7693
|
+
|
|
7694
|
+
assert _missing_required_gates(Path("/dev/null"), "quadraui", 1109) == ()
|
|
7695
|
+
assert seen == [sentinel_board]
|
|
7696
|
+
|
|
7697
|
+
|
|
7517
7698
|
class TestDriveQueueListReadDistinguishesFailureFromEmpty:
|
|
7518
7699
|
"""#2992: `coord drive-queue list` must not report a daemon it could
|
|
7519
7700
|
not read as "the queue is empty" — those are two different facts and
|
|
File without changes
|
|
File without changes
|
|
File without changes
|