code-coordinator 0.5.515__tar.gz → 0.5.517__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.515 → code_coordinator-0.5.517}/PKG-INFO +1 -1
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/code_coordinator.egg-info/SOURCES.txt +2 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/code_coordinator.egg-info/scm_file_list.json +2 -0
- code_coordinator-0.5.517/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/claim.py +54 -8
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/dispatch.py +9 -9
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/release.py +8 -9
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/sessions.py +21 -20
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/terminal.py +19 -6
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/config.py +203 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dashboard/server.py +3 -6
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dashboard/terminal.py +4 -12
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/diagnose.py +6 -10
- code_coordinator-0.5.517/coord/health/checks/local_machine_identity.py +97 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/interactive.py +13 -16
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/models.py +7 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/service.py +22 -8
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/revalidate.py +6 -11
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/test_author.py +1 -1
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/test_orchestrator.py +9 -13
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/conftest.py +37 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_claim.py +100 -11
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_config.py +281 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dashboard_terminal.py +10 -10
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_gather_fleet_tmux_sessions.py +8 -2
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_checks.py +67 -0
- code_coordinator-0.5.517/tests/test_interactive.py +153 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_interactive_session_relaunch.py +10 -10
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reap_stale_interactive_tick.py +7 -5
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_remote_interactive_reaper.py +1 -1
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_smoke_live_checkout_restore.py +3 -3
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_terminal_command.py +8 -2
- code_coordinator-0.5.515/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/.gitignore +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/CLAUDE.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/GOAL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/LICENSE +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/MANIFEST.in +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/README.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/__init__.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/agent.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/audit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/backup.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/block_log.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/board_service.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/brain.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/cli.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/client.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/codegen.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/comments.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dao.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/db.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/deps.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/drive.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/events.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/filelock.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/freshness.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/gates.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/goal.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/context.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/models.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/render.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/health/units.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/hooks.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/network.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/notify.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/openapi.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/parentage.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/plans.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/progress.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/release_window.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/reports.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/review.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/self_health.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/smoke.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/split_work.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/sql.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/state.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/test_report.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/usage.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/install-agent.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/pyproject.toml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/setup.cfg +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/__init__.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/backends.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_client.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_db.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_events.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_init.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_models.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_network.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_review.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_session.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_split.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_state.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.515 → code_coordinator-0.5.517}/tests/write_parity.py +0 -0
|
@@ -265,6 +265,7 @@ coord/health/checks/graph.py
|
|
|
265
265
|
coord/health/checks/graphify_cli.py
|
|
266
266
|
coord/health/checks/index_lock.py
|
|
267
267
|
coord/health/checks/issues_sync_staleness.py
|
|
268
|
+
coord/health/checks/local_machine_identity.py
|
|
268
269
|
coord/health/checks/plan_usage.py
|
|
269
270
|
coord/health/checks/pr_churn.py
|
|
270
271
|
coord/health/checks/release_cordon.py
|
|
@@ -685,6 +686,7 @@ tests/test_human_attended_437.py
|
|
|
685
686
|
tests/test_init.py
|
|
686
687
|
tests/test_install_agent_venv_2911.py
|
|
687
688
|
tests/test_integration.py
|
|
689
|
+
tests/test_interactive.py
|
|
688
690
|
tests/test_interactive_briefing_echo.py
|
|
689
691
|
tests/test_interactive_pane_log_2541.py
|
|
690
692
|
tests/test_interactive_prefill_state.py
|
{code_coordinator-0.5.515 → code_coordinator-0.5.517}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -174,6 +174,7 @@
|
|
|
174
174
|
"coord/health/checks/graphify_cli.py",
|
|
175
175
|
"coord/health/checks/index_lock.py",
|
|
176
176
|
"coord/health/checks/issues_sync_staleness.py",
|
|
177
|
+
"coord/health/checks/local_machine_identity.py",
|
|
177
178
|
"coord/health/checks/plan_usage.py",
|
|
178
179
|
"coord/health/checks/pr_churn.py",
|
|
179
180
|
"coord/health/checks/release_cordon.py",
|
|
@@ -711,6 +712,7 @@
|
|
|
711
712
|
"tests/test_init.py",
|
|
712
713
|
"tests/test_install_agent_venv_2911.py",
|
|
713
714
|
"tests/test_integration.py",
|
|
715
|
+
"tests/test_interactive.py",
|
|
714
716
|
"tests/test_interactive_briefing_echo.py",
|
|
715
717
|
"tests/test_interactive_pane_log_2541.py",
|
|
716
718
|
"tests/test_interactive_prefill_state.py",
|
|
@@ -454,6 +454,40 @@ def _default_branch_lookup(repo_github: str, issue_number: int) -> list[str]:
|
|
|
454
454
|
return _drop_merged_branches(repo_github, branches)
|
|
455
455
|
|
|
456
456
|
|
|
457
|
+
# #3442: bracket-tag issue_title prefixes (`f"[{tag}] {title}"`, see
|
|
458
|
+
# `coord.review.dispatch_review` / `coord.review._dispatch_scoped_review` /
|
|
459
|
+
# `coord.smoke.dispatch_pending_smoke` / `coord.gate_b`'s tracking-issue
|
|
460
|
+
# dispatch) that a review/smoke/gate-b leg dispatch uses when it does NOT
|
|
461
|
+
# pin `target_branch` to the real work branch — the agent then derives its
|
|
462
|
+
# own throwaway branch name by slugifying that bracketed title
|
|
463
|
+
# (`coord.agent._slugify`), landing on `issue-{N}-{tag}-...`. These legs
|
|
464
|
+
# are read-only observers: a review posts a verdict comment, a smoke run
|
|
465
|
+
# executes a command, gate-b posts a milestone verdict — none of them ever
|
|
466
|
+
# commits to its own checkout, so that branch sits at `ahead_by == 0`
|
|
467
|
+
# against the default branch from the moment it's created, forever,
|
|
468
|
+
# regardless of whether the issue's REAL work has landed. It is not
|
|
469
|
+
# evidence of anything. Every OTHER dispatcher that continues real work on
|
|
470
|
+
# an issue (conflict-fix, retry, fix-N) pins `target_branch` to the actual
|
|
471
|
+
# work branch instead of letting one of these get minted, so this list is
|
|
472
|
+
# deliberately just the observer legs, not every bracket tag in the
|
|
473
|
+
# codebase — though as #3442's own review round found for gate-b, that
|
|
474
|
+
# distinction has to be verified per-dispatcher, not assumed; see the
|
|
475
|
+
# issue's suggested structural alternative (branch never had commits, ever)
|
|
476
|
+
# for a fix that wouldn't require keeping this list exhaustive by hand.
|
|
477
|
+
_OBSERVER_LEG_TAGS = ("review", "scoped-review", "smoke", "gate-b")
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
def _is_observer_leg_branch(branch: str, issue_number: int) -> bool:
|
|
481
|
+
"""True when *branch* is a review/smoke leg's own throwaway checkout,
|
|
482
|
+
not a branch that could ever carry real work (see `_OBSERVER_LEG_TAGS`).
|
|
483
|
+
"""
|
|
484
|
+
for tag in _OBSERVER_LEG_TAGS:
|
|
485
|
+
prefix = f"issue-{issue_number}-{tag}"
|
|
486
|
+
if branch == prefix or branch.startswith(prefix + "-"):
|
|
487
|
+
return True
|
|
488
|
+
return False
|
|
489
|
+
|
|
490
|
+
|
|
457
491
|
def any_matching_branch_merged(
|
|
458
492
|
repo_github: str, issue_number: int, *, branch: str | None = None
|
|
459
493
|
) -> bool:
|
|
@@ -476,17 +510,29 @@ def any_matching_branch_merged(
|
|
|
476
510
|
merged" behaviour only when *branch* is `None` — a caller with nothing
|
|
477
511
|
assigned yet (a pre-dispatch check before any branch exists) has no
|
|
478
512
|
single branch to ask about, so the issue-scoped signal is the best one
|
|
479
|
-
available.
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
513
|
+
available. #3442: that fallback first drops every known
|
|
514
|
+
`_is_observer_leg_branch` candidate — #3436 only fixed the case where
|
|
515
|
+
the dispatch's OWN branch was already known; a plain `coord assign`
|
|
516
|
+
(or any other caller with no branch recorded yet, which is exactly when
|
|
517
|
+
this fallback runs) has no branch of its own to scope to, so without
|
|
518
|
+
this filter a single zero-commit `issue-{N}-review-*`/`issue-{N}-smoke-
|
|
519
|
+
*` leg branch still reads the WHOLE issue as merged and permanently
|
|
520
|
+
refuses dispatch — the same bug #3436 fixed for the branch-known case,
|
|
521
|
+
reopened for the branch-unknown one. Reuses the exact merge-detection
|
|
522
|
+
`_drop_merged_branches` already performs for claim detection (PR-merged
|
|
523
|
+
OR `ahead_by == 0` ancestry, survives squash merges — #3103): this is
|
|
524
|
+
just "did filtering drop anything", with the fail-open direction
|
|
525
|
+
flipped to match a REFUSAL predicate rather than a claim-signal — no
|
|
526
|
+
matching branch at all, or any lookup failure, returns `False` ("not
|
|
527
|
+
merged, don't refuse dispatch on this"), never `True`.
|
|
486
528
|
"""
|
|
487
529
|
if branch is not None:
|
|
488
530
|
return not _drop_merged_branches(repo_github, [branch])
|
|
489
|
-
branches =
|
|
531
|
+
branches = [
|
|
532
|
+
b
|
|
533
|
+
for b in list_matching_remote_branches(repo_github, issue_number)
|
|
534
|
+
if not _is_observer_leg_branch(b, issue_number)
|
|
535
|
+
]
|
|
490
536
|
if not branches:
|
|
491
537
|
return False
|
|
492
538
|
unmerged = set(_drop_merged_branches(repo_github, branches))
|
|
@@ -6,7 +6,6 @@ Extracted from coord/cli.py (#747)."""
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
8
|
import dataclasses
|
|
9
|
-
import socket
|
|
10
9
|
import sys
|
|
11
10
|
from pathlib import Path
|
|
12
11
|
from typing import TYPE_CHECKING
|
|
@@ -1498,7 +1497,7 @@ def assign(
|
|
|
1498
1497
|
if interactive:
|
|
1499
1498
|
setup = _build_interactive_launch_setup(
|
|
1500
1499
|
machine=machine, repo=repo, issue=issue, machine_obj=machine_obj,
|
|
1501
|
-
dry_run=dry_run,
|
|
1500
|
+
dry_run=dry_run, config=cfg,
|
|
1502
1501
|
)
|
|
1503
1502
|
provider = setup.provider
|
|
1504
1503
|
_is_local = setup.is_local
|
|
@@ -1635,6 +1634,7 @@ def _build_interactive_launch_setup(
|
|
|
1635
1634
|
issue: int,
|
|
1636
1635
|
machine_obj: object,
|
|
1637
1636
|
dry_run: bool,
|
|
1637
|
+
config: object,
|
|
1638
1638
|
) -> _InteractiveLaunchSetup:
|
|
1639
1639
|
# #2086: the authoritative gate — see _require_interactive_tty's
|
|
1640
1640
|
# docstring. Every --interactive flavour in BOTH callers (assign()'s
|
|
@@ -1668,13 +1668,13 @@ def _build_interactive_launch_setup(
|
|
|
1668
1668
|
)
|
|
1669
1669
|
|
|
1670
1670
|
# Detect whether the target machine is the local machine so we can
|
|
1671
|
-
# choose the local TTY path vs the remote SSH+tmux path (#494).
|
|
1672
|
-
#
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1671
|
+
# choose the local TTY path vs the remote SSH+tmux path (#494). Routed
|
|
1672
|
+
# through the single shared resolver (#3440) — alias list, Tailscale
|
|
1673
|
+
# identity, then hostname fallback, not a private hostname comparison.
|
|
1674
|
+
from coord.config import resolve_local_machine # noqa: PLC0415
|
|
1675
|
+
|
|
1676
|
+
_resolved_local = resolve_local_machine(config)
|
|
1677
|
+
_is_local = _resolved_local is not None and _resolved_local.name == machine_obj.name
|
|
1678
1678
|
|
|
1679
1679
|
# #590/#749: on a thin client the local board/DB is empty, so resolve the
|
|
1680
1680
|
# interactive-launch target (--review-of/--fix-of/--rework-of/--smoke-of/
|
|
@@ -2461,16 +2461,15 @@ def _uncordon_hosts(hosts: list[str], journal: dict, *, quiet: bool = False) ->
|
|
|
2461
2461
|
|
|
2462
2462
|
|
|
2463
2463
|
def _local_machine_name(config) -> str | None:
|
|
2464
|
-
"""This host's name in ``coordinator.yml``, if it is in there at all.
|
|
2465
|
-
import socket # noqa: PLC0415
|
|
2464
|
+
"""This host's name in ``coordinator.yml``, if it is in there at all.
|
|
2466
2465
|
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
return None
|
|
2466
|
+
Routes through :func:`coord.config.resolve_local_machine` (#3440) rather
|
|
2467
|
+
than a private hostname comparison — "one question, one answer".
|
|
2468
|
+
"""
|
|
2469
|
+
from coord.config import resolve_local_machine # noqa: PLC0415
|
|
2470
|
+
|
|
2471
|
+
resolved = resolve_local_machine(config)
|
|
2472
|
+
return resolved.name if resolved is not None else None
|
|
2474
2473
|
|
|
2475
2474
|
|
|
2476
2475
|
def _roll_python(machine, *, target_version: str, agent_port: int, timeout: float,
|
|
@@ -6,7 +6,6 @@ from __future__ import annotations
|
|
|
6
6
|
import fnmatch
|
|
7
7
|
import os
|
|
8
8
|
import shutil
|
|
9
|
-
import socket
|
|
10
9
|
import subprocess
|
|
11
10
|
import sys
|
|
12
11
|
import time
|
|
@@ -561,11 +560,10 @@ def pull_artifact(
|
|
|
561
560
|
# rsync-over-ssh to our own hostname FAILS ("Permission denied" — no
|
|
562
561
|
# self-ssh key), which surfaced as a meaningless pull error in the TUI.
|
|
563
562
|
# Copy locally if the destination differs; otherwise it is a no-op.
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
)
|
|
563
|
+
from coord.config import resolve_local_machine # noqa: PLC0415
|
|
564
|
+
|
|
565
|
+
_resolved_local = resolve_local_machine(cfg)
|
|
566
|
+
is_local = _resolved_local is not None and _resolved_local.name == machine.name
|
|
569
567
|
if is_local:
|
|
570
568
|
src_dir = Path.home() / ".coord" / "artifacts" / repo_name / sanitized
|
|
571
569
|
# Nothing to copy when the destination IS the stash directory
|
|
@@ -678,8 +676,8 @@ def _prune_dead_sessions(enriched: "list[dict]", config_path: "Path") -> None:
|
|
|
678
676
|
from coord.state import COORD_DIR, get_connection # noqa: PLC0415
|
|
679
677
|
from coord.agent import _commits_ahead # noqa: PLC0415
|
|
680
678
|
from coord.interactive import tmux_session_name # noqa: PLC0415
|
|
679
|
+
from coord.config import resolve_local_machine # noqa: PLC0415
|
|
681
680
|
|
|
682
|
-
_local_hn = socket.gethostname().split(".")[0].lower()
|
|
683
681
|
worktrees_dir = COORD_DIR / "worktrees"
|
|
684
682
|
now = time.time()
|
|
685
683
|
|
|
@@ -688,9 +686,11 @@ def _prune_dead_sessions(enriched: "list[dict]", config_path: "Path") -> None:
|
|
|
688
686
|
cfg = _load_config(config_path)
|
|
689
687
|
machines_by_name = {m.name: m for m in cfg.machines}
|
|
690
688
|
repos_by_name = {r.name: r for r in cfg.repos}
|
|
689
|
+
_resolved_local = resolve_local_machine(cfg)
|
|
691
690
|
except Exception: # noqa: BLE001
|
|
692
691
|
machines_by_name = {}
|
|
693
692
|
repos_by_name = {}
|
|
693
|
+
_resolved_local = None
|
|
694
694
|
|
|
695
695
|
pruned = 0
|
|
696
696
|
for s in enriched:
|
|
@@ -703,8 +703,7 @@ def _prune_dead_sessions(enriched: "list[dict]", config_path: "Path") -> None:
|
|
|
703
703
|
mobj = machines_by_name.get(raw_machine)
|
|
704
704
|
if mobj is not None:
|
|
705
705
|
_is_local = (
|
|
706
|
-
|
|
707
|
-
or mobj.host.split(".")[0].lower() == _local_hn
|
|
706
|
+
_resolved_local is not None and _resolved_local.name == mobj.name
|
|
708
707
|
)
|
|
709
708
|
else:
|
|
710
709
|
# Machine name set but not in config — treat as remote to be safe.
|
|
@@ -887,14 +886,13 @@ def sessions_cmd(
|
|
|
887
886
|
import concurrent.futures as _cf # noqa: PLC0415
|
|
888
887
|
|
|
889
888
|
try:
|
|
889
|
+
from coord.config import resolve_local_machine # noqa: PLC0415
|
|
890
|
+
|
|
890
891
|
_cfg = _load_config(config_path)
|
|
891
|
-
|
|
892
|
+
_resolved_local = resolve_local_machine(_cfg)
|
|
892
893
|
_remotes = [
|
|
893
894
|
m for m in _cfg.machines
|
|
894
|
-
if
|
|
895
|
-
m.name.lower() == _local_hn
|
|
896
|
-
or m.host.split(".")[0].lower() == _local_hn
|
|
897
|
-
)
|
|
895
|
+
if _resolved_local is None or m.name != _resolved_local.name
|
|
898
896
|
]
|
|
899
897
|
except Exception: # noqa: BLE001
|
|
900
898
|
_remotes = []
|
|
@@ -1275,10 +1273,12 @@ def reattach(assignment_id: str, config_path: Path) -> None:
|
|
|
1275
1273
|
else ("$HOME" if rp == "~" else rp)
|
|
1276
1274
|
)
|
|
1277
1275
|
ssh_target_val = machine_obj.host
|
|
1278
|
-
|
|
1276
|
+
from coord.config import resolve_local_machine # noqa: PLC0415
|
|
1277
|
+
|
|
1278
|
+
_resolved_local = resolve_local_machine(cfg)
|
|
1279
1279
|
is_local_session = (
|
|
1280
|
-
|
|
1281
|
-
|
|
1280
|
+
_resolved_local is not None
|
|
1281
|
+
and _resolved_local.name == machine_obj.name
|
|
1282
1282
|
)
|
|
1283
1283
|
except Exception: # noqa: BLE001
|
|
1284
1284
|
pass
|
|
@@ -1904,12 +1904,13 @@ def watch(
|
|
|
1904
1904
|
sys.exit(2)
|
|
1905
1905
|
|
|
1906
1906
|
# ── Detect whether the assignment lives on a remote agent ────────────
|
|
1907
|
+
from coord.config import resolve_local_machine # noqa: PLC0415
|
|
1908
|
+
|
|
1907
1909
|
machine_name = record.get("machine_name", "")
|
|
1908
1910
|
machine = next((m for m in cfg.machines if m.name == machine_name), None)
|
|
1909
|
-
|
|
1911
|
+
_resolved_local = resolve_local_machine(cfg)
|
|
1910
1912
|
is_remote = machine is not None and (
|
|
1911
|
-
|
|
1912
|
-
and machine.host.split(".")[0] != hostname
|
|
1913
|
+
_resolved_local is None or _resolved_local.name != machine.name
|
|
1913
1914
|
)
|
|
1914
1915
|
|
|
1915
1916
|
if is_remote:
|
|
@@ -29,12 +29,17 @@ import subprocess
|
|
|
29
29
|
import sys
|
|
30
30
|
from datetime import datetime, timezone
|
|
31
31
|
from pathlib import Path
|
|
32
|
+
from typing import TYPE_CHECKING
|
|
32
33
|
|
|
33
34
|
import click
|
|
34
35
|
|
|
35
36
|
from coord.commands._common import _CONFIG_OPTION, _load_config
|
|
36
37
|
from coord.interactive import TERM_SESSION_PREFIX, TmuxHost, tmux_available, tmux_session_alive
|
|
37
38
|
|
|
39
|
+
if TYPE_CHECKING:
|
|
40
|
+
from coord.config import Config
|
|
41
|
+
from coord.models import Machine
|
|
42
|
+
|
|
38
43
|
__all__ = [
|
|
39
44
|
"terminal_group",
|
|
40
45
|
"terminal_session_name",
|
|
@@ -129,9 +134,17 @@ def _local_short_hostname() -> str:
|
|
|
129
134
|
return socket.gethostname().split(".")[0].lower()
|
|
130
135
|
|
|
131
136
|
|
|
132
|
-
def _is_local_machine(
|
|
133
|
-
|
|
134
|
-
|
|
137
|
+
def _is_local_machine(cfg: "Config", machine: "Machine") -> bool:
|
|
138
|
+
"""Is *machine* the host this process is running on?
|
|
139
|
+
|
|
140
|
+
Routes through :func:`coord.config.resolve_local_machine` (#3440) — the
|
|
141
|
+
shared "is this the local machine or must I SSH?" answer — rather than a
|
|
142
|
+
private hostname comparison.
|
|
143
|
+
"""
|
|
144
|
+
from coord.config import resolve_local_machine # noqa: PLC0415
|
|
145
|
+
|
|
146
|
+
resolved = resolve_local_machine(cfg)
|
|
147
|
+
return resolved is not None and resolved.name == machine.name
|
|
135
148
|
|
|
136
149
|
|
|
137
150
|
def _resolve_machine_host(
|
|
@@ -153,7 +166,7 @@ def _resolve_machine_host(
|
|
|
153
166
|
click.echo(f"error: machine {machine_name!r} not in config", err=True)
|
|
154
167
|
sys.exit(1)
|
|
155
168
|
|
|
156
|
-
if _is_local_machine(
|
|
169
|
+
if _is_local_machine(cfg, machine):
|
|
157
170
|
return TmuxHost(ssh_target=None), machine.name
|
|
158
171
|
return TmuxHost(ssh_target=machine.host), machine.name
|
|
159
172
|
|
|
@@ -261,7 +274,7 @@ def terminal_list(output_json: bool, remote: bool, config_path: Path) -> None:
|
|
|
261
274
|
local_host_str = local_hn
|
|
262
275
|
if cfg is not None:
|
|
263
276
|
m = next(
|
|
264
|
-
(mm for mm in cfg.machines if _is_local_machine(
|
|
277
|
+
(mm for mm in cfg.machines if _is_local_machine(cfg, mm)), None
|
|
265
278
|
)
|
|
266
279
|
if m is not None:
|
|
267
280
|
local_machine_name = m.name
|
|
@@ -274,7 +287,7 @@ def terminal_list(output_json: bool, remote: bool, config_path: Path) -> None:
|
|
|
274
287
|
|
|
275
288
|
if remote and cfg is not None:
|
|
276
289
|
remotes = [
|
|
277
|
-
m for m in cfg.machines if not _is_local_machine(
|
|
290
|
+
m for m in cfg.machines if not _is_local_machine(cfg, m)
|
|
278
291
|
]
|
|
279
292
|
if remotes:
|
|
280
293
|
import concurrent.futures as _cf # noqa: PLC0415
|
|
@@ -3,9 +3,15 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import fnmatch
|
|
6
|
+
import json
|
|
6
7
|
import os
|
|
7
8
|
import re
|
|
9
|
+
import socket
|
|
10
|
+
import subprocess
|
|
8
11
|
import sys
|
|
12
|
+
# `from datetime import time` below shadows the stdlib `time` module in this
|
|
13
|
+
# namespace, so the monotonic clock is imported under an explicit alias.
|
|
14
|
+
import time as time_module
|
|
9
15
|
from dataclasses import dataclass, field, fields
|
|
10
16
|
from datetime import time
|
|
11
17
|
from pathlib import Path
|
|
@@ -2408,6 +2414,192 @@ class Config:
|
|
|
2408
2414
|
return next((r for r in self.repos if r.name == name), None)
|
|
2409
2415
|
|
|
2410
2416
|
|
|
2417
|
+
def _local_short_hostname() -> str:
|
|
2418
|
+
"""The OS short hostname (split on '.', lowercased).
|
|
2419
|
+
|
|
2420
|
+
Isolated so tests can patch ``coord.config._local_short_hostname``
|
|
2421
|
+
without monkey-patching the global ``socket`` module. This is the
|
|
2422
|
+
lowest-priority signal :func:`resolve_local_machine` consults — see
|
|
2423
|
+
its docstring.
|
|
2424
|
+
"""
|
|
2425
|
+
return socket.gethostname().split(".")[0].lower()
|
|
2426
|
+
|
|
2427
|
+
|
|
2428
|
+
def _tailscale_self_dns_name(*, timeout: float = 3.0) -> str | None:
|
|
2429
|
+
"""This host's Tailscale DNS name via ``tailscale status --self --json``,
|
|
2430
|
+
or ``None`` when it can't be determined.
|
|
2431
|
+
|
|
2432
|
+
``Self.DNSName`` (falling back to ``Self.HostName``) is exactly what a
|
|
2433
|
+
machine's ``host:`` is set FROM in a Tailscale fleet (#3440) — e.g.
|
|
2434
|
+
``macmini.tailf46ef8.ts.net``. Degrades quietly (never raises) when the
|
|
2435
|
+
``tailscale`` binary is absent, the call times out, or the output isn't
|
|
2436
|
+
the JSON shape expected: this is an optional identity signal, one of
|
|
2437
|
+
several :func:`resolve_local_machine` tries, not a hard dependency.
|
|
2438
|
+
"""
|
|
2439
|
+
try:
|
|
2440
|
+
result = subprocess.run(
|
|
2441
|
+
["tailscale", "status", "--self", "--json"],
|
|
2442
|
+
capture_output=True,
|
|
2443
|
+
text=True,
|
|
2444
|
+
timeout=timeout,
|
|
2445
|
+
check=False,
|
|
2446
|
+
)
|
|
2447
|
+
except (OSError, subprocess.TimeoutExpired):
|
|
2448
|
+
return None
|
|
2449
|
+
if result.returncode != 0 or not result.stdout:
|
|
2450
|
+
return None
|
|
2451
|
+
try:
|
|
2452
|
+
data = json.loads(result.stdout)
|
|
2453
|
+
except json.JSONDecodeError:
|
|
2454
|
+
return None
|
|
2455
|
+
self_info = data.get("Self") if isinstance(data, dict) else None
|
|
2456
|
+
if not isinstance(self_info, dict):
|
|
2457
|
+
return None
|
|
2458
|
+
dns_name = self_info.get("DNSName") or self_info.get("HostName")
|
|
2459
|
+
if not isinstance(dns_name, str) or not dns_name:
|
|
2460
|
+
return None
|
|
2461
|
+
return dns_name.rstrip(".").lower()
|
|
2462
|
+
|
|
2463
|
+
|
|
2464
|
+
# #3440: memo for :func:`_cached_tailscale_self_dns_name` — ``(monotonic
|
|
2465
|
+
# deadline | None, answer)``. A ``None`` deadline means "never expires".
|
|
2466
|
+
_TS_SELF_DNS_MEMO: tuple[float | None, str | None] | None = None
|
|
2467
|
+
|
|
2468
|
+
# How long a FAILED probe is remembered. Deliberately short and finite: see
|
|
2469
|
+
# :func:`_cached_tailscale_self_dns_name`.
|
|
2470
|
+
TS_SELF_DNS_NEGATIVE_TTL = 60.0
|
|
2471
|
+
|
|
2472
|
+
|
|
2473
|
+
def reset_tailscale_self_dns_cache() -> None:
|
|
2474
|
+
"""Forget the memoized Tailscale self-identity.
|
|
2475
|
+
|
|
2476
|
+
Exported for tests (``tests/conftest.py`` resets it between tests, the
|
|
2477
|
+
same shape as ``reset_resource_route_support``): a module-level memo
|
|
2478
|
+
would otherwise leak one test's stubbed identity into the next.
|
|
2479
|
+
"""
|
|
2480
|
+
global _TS_SELF_DNS_MEMO
|
|
2481
|
+
_TS_SELF_DNS_MEMO = None
|
|
2482
|
+
|
|
2483
|
+
|
|
2484
|
+
def _cached_tailscale_self_dns_name(
|
|
2485
|
+
*, now: float | None = None,
|
|
2486
|
+
) -> str | None:
|
|
2487
|
+
""":func:`_tailscale_self_dns_name`, memoized — the accessor
|
|
2488
|
+
:func:`resolve_local_machine` actually calls.
|
|
2489
|
+
|
|
2490
|
+
Why memoize at all: ``resolve_local_machine`` is called on a timer by
|
|
2491
|
+
long-lived processes (``coord serve``'s reap ticks, every few seconds).
|
|
2492
|
+
On a host that matches no machine by hostname — precisely the #3440 host,
|
|
2493
|
+
and every thin client — the Tailscale tier is reached on EVERY call, so
|
|
2494
|
+
an unmemoized probe is a ``tailscale`` subprocess (up to a 3s timeout)
|
|
2495
|
+
every few seconds, forever.
|
|
2496
|
+
|
|
2497
|
+
Why a SUCCESS is cached forever but a FAILURE is not (#2096): a host's
|
|
2498
|
+
Tailscale DNS name is a stable fact for the lifetime of a process, so
|
|
2499
|
+
re-probing after a successful answer buys nothing. A failed probe is
|
|
2500
|
+
*not* a fact about the host — it is a fact about the last 3 seconds
|
|
2501
|
+
(``tailscaled`` not up yet, the daemon started at boot before the network
|
|
2502
|
+
did). Caching that forever would turn a transient miss into a permanent,
|
|
2503
|
+
uncontradictable "this host is not in the fleet" verdict for a daemon
|
|
2504
|
+
that runs for days, which is the same class of bug as the one #3440 is
|
|
2505
|
+
fixing. So a negative answer is retried after
|
|
2506
|
+
``TS_SELF_DNS_NEGATIVE_TTL`` seconds — bounded cost, self-healing.
|
|
2507
|
+
"""
|
|
2508
|
+
global _TS_SELF_DNS_MEMO
|
|
2509
|
+
|
|
2510
|
+
now = time_module.monotonic() if now is None else now
|
|
2511
|
+
memo = _TS_SELF_DNS_MEMO
|
|
2512
|
+
if memo is not None:
|
|
2513
|
+
expires_at, answer = memo
|
|
2514
|
+
if expires_at is None or now < expires_at:
|
|
2515
|
+
return answer
|
|
2516
|
+
|
|
2517
|
+
answer = _tailscale_self_dns_name()
|
|
2518
|
+
_TS_SELF_DNS_MEMO = (
|
|
2519
|
+
None if answer else now + TS_SELF_DNS_NEGATIVE_TTL,
|
|
2520
|
+
answer,
|
|
2521
|
+
)
|
|
2522
|
+
return answer
|
|
2523
|
+
|
|
2524
|
+
|
|
2525
|
+
def resolve_local_machine(
|
|
2526
|
+
config: "Config", *, env: "dict[str, str] | None" = None,
|
|
2527
|
+
) -> "Machine | None":
|
|
2528
|
+
"""The single answer to "which configured machine, if any, IS the host
|
|
2529
|
+
this process is running on?" (#3440).
|
|
2530
|
+
|
|
2531
|
+
Every "is this local or remote" call site in the codebase must call
|
|
2532
|
+
this instead of keeping a private ``socket.gethostname()`` comparison —
|
|
2533
|
+
two independent implementations of the same question are a split-brain
|
|
2534
|
+
waiting to happen (see #2085). Tried in order, first match wins:
|
|
2535
|
+
|
|
2536
|
+
1. Each machine's own ``local_hostnames:`` alias list (the operator's
|
|
2537
|
+
escape hatch) against the OS short hostname — for hosts whose OS
|
|
2538
|
+
hostname matches neither ``name`` nor ``host`` (macOS's default
|
|
2539
|
+
``Johns-Mac-mini``, observed on macmini).
|
|
2540
|
+
2. The historical fallback: OS short hostname vs ``machine.name`` or
|
|
2541
|
+
the first label of ``machine.host``. Tried BEFORE the Tailscale
|
|
2542
|
+
probe below — deliberately: this comparison is pure and free, it
|
|
2543
|
+
resolves the overwhelming majority of fleet machines (whose OS
|
|
2544
|
+
hostname already agrees with `coordinator.yml`), and periodic
|
|
2545
|
+
callers (`coord serve`'s reap ticks) run it every few seconds —
|
|
2546
|
+
shelling out to `tailscale` that often, when a free comparison
|
|
2547
|
+
already answers the question, is both wasteful and, in one
|
|
2548
|
+
audited path, breaks a ToS no-unexpected-subprocess guardrail
|
|
2549
|
+
(`tests/test_reap_merged_sessions.py`).
|
|
2550
|
+
3. This host's Tailscale identity
|
|
2551
|
+
(:func:`_cached_tailscale_self_dns_name`) against ``machine.host``'s
|
|
2552
|
+
full DNS name, not just its first label — ``host:`` is set FROM the
|
|
2553
|
+
Tailscale DNS name in this fleet, so this is the tier that actually
|
|
2554
|
+
fixes #3440: it catches exactly the hosts step 2 cannot (an OS
|
|
2555
|
+
hostname with nothing to do with the fleet name). Only reached when
|
|
2556
|
+
steps 1–2 found nothing, AND memoized per process, so the subprocess
|
|
2557
|
+
cost is paid once by the hosts that actually need it rather than on
|
|
2558
|
+
every reap tick.
|
|
2559
|
+
4. ``$COORD_LOCAL_MACHINE`` (or *env*'s override) naming a machine by
|
|
2560
|
+
``name`` exactly — the last-resort override for when none of the
|
|
2561
|
+
above can match at all.
|
|
2562
|
+
|
|
2563
|
+
Returns ``None`` when nothing matches — callers must treat that as
|
|
2564
|
+
"this host isn't a recognized machine in coordinator.yml", never
|
|
2565
|
+
silently assume remote OR local.
|
|
2566
|
+
"""
|
|
2567
|
+
local_hostname = _local_short_hostname()
|
|
2568
|
+
|
|
2569
|
+
for machine in config.machines:
|
|
2570
|
+
# getattr, not a bare attribute read: some call sites pass
|
|
2571
|
+
# duck-typed test fixtures predating this field rather than a real
|
|
2572
|
+
# `coord.models.Machine` — treat "no attribute" the same as "empty
|
|
2573
|
+
# list" (this field's own documented default) rather than raising.
|
|
2574
|
+
aliases = {a.lower() for a in getattr(machine, "local_hostnames", None) or []}
|
|
2575
|
+
if local_hostname in aliases:
|
|
2576
|
+
return machine
|
|
2577
|
+
|
|
2578
|
+
for machine in config.machines:
|
|
2579
|
+
if (
|
|
2580
|
+
machine.name.lower() == local_hostname
|
|
2581
|
+
or machine.host.split(".")[0].lower() == local_hostname
|
|
2582
|
+
):
|
|
2583
|
+
return machine
|
|
2584
|
+
|
|
2585
|
+
ts_dns = _cached_tailscale_self_dns_name()
|
|
2586
|
+
if ts_dns:
|
|
2587
|
+
for machine in config.machines:
|
|
2588
|
+
host = (machine.host or "").rstrip(".").lower()
|
|
2589
|
+
if host and host == ts_dns:
|
|
2590
|
+
return machine
|
|
2591
|
+
|
|
2592
|
+
if env is None:
|
|
2593
|
+
env = os.environ
|
|
2594
|
+
override = env.get("COORD_LOCAL_MACHINE")
|
|
2595
|
+
if override:
|
|
2596
|
+
for machine in config.machines:
|
|
2597
|
+
if machine.name.lower() == override.lower():
|
|
2598
|
+
return machine
|
|
2599
|
+
|
|
2600
|
+
return None
|
|
2601
|
+
|
|
2602
|
+
|
|
2411
2603
|
def load(path: str | Path | None = None) -> Config:
|
|
2412
2604
|
"""Load and validate a coordinator.yml file.
|
|
2413
2605
|
|
|
@@ -3095,6 +3287,16 @@ def _parse_machines(raw: Any, repos: list[Repo]) -> list[Machine]:
|
|
|
3095
3287
|
entry.get("quiet_hours"), machine_index=i, machine_name=name,
|
|
3096
3288
|
)
|
|
3097
3289
|
|
|
3290
|
+
# #3440: optional alias list of OS short hostnames that should be
|
|
3291
|
+
# treated as "this machine" by `resolve_local_machine` — the
|
|
3292
|
+
# operator's escape hatch for hosts whose OS hostname (e.g. macOS's
|
|
3293
|
+
# `Johns-Mac-mini` default) matches neither `name` nor `host`.
|
|
3294
|
+
local_hostnames = entry.get("local_hostnames", []) or []
|
|
3295
|
+
if not isinstance(local_hostnames, list) or not all(
|
|
3296
|
+
isinstance(h, str) for h in local_hostnames
|
|
3297
|
+
):
|
|
3298
|
+
raise ConfigError(f"machines[{i}].local_hostnames must be a list of strings")
|
|
3299
|
+
|
|
3098
3300
|
# #3366: optional fact about which init system supervises this
|
|
3099
3301
|
# host's `coord agent` — see `Machine.supervisor`'s docstring for
|
|
3100
3302
|
# why it isn't inferred. Validated against the two names
|
|
@@ -3136,6 +3338,7 @@ def _parse_machines(raw: Any, repos: list[Repo]) -> list[Machine]:
|
|
|
3136
3338
|
quiet_hours=quiet_hours,
|
|
3137
3339
|
health_timeout=machine_health_timeout,
|
|
3138
3340
|
supervisor=machine_supervisor,
|
|
3341
|
+
local_hostnames=local_hostnames,
|
|
3139
3342
|
)
|
|
3140
3343
|
)
|
|
3141
3344
|
return machines
|
|
@@ -3234,21 +3234,18 @@ def build_app(
|
|
|
3234
3234
|
# Seeded roster — no tmux, no ssh fan-out in fixture mode.
|
|
3235
3235
|
return JSONResponse(_fixture.sessions())
|
|
3236
3236
|
|
|
3237
|
+
from coord.config import resolve_local_machine
|
|
3237
3238
|
from coord.interactive import (
|
|
3238
3239
|
TMUX_SESSION_PREFIX,
|
|
3239
3240
|
TmuxHost,
|
|
3240
|
-
_get_local_short_hostname,
|
|
3241
3241
|
list_coord_tmux_sessions,
|
|
3242
3242
|
)
|
|
3243
3243
|
|
|
3244
3244
|
loop = asyncio.get_running_loop()
|
|
3245
|
-
|
|
3245
|
+
_resolved_local = resolve_local_machine(config)
|
|
3246
3246
|
|
|
3247
3247
|
def _is_local_machine(machine) -> bool:
|
|
3248
|
-
return
|
|
3249
|
-
machine.name.lower() == local_hn
|
|
3250
|
-
or machine.host.split(".")[0].lower() == local_hn
|
|
3251
|
-
)
|
|
3248
|
+
return _resolved_local is not None and _resolved_local.name == machine.name
|
|
3252
3249
|
|
|
3253
3250
|
def _sweep_one(machine):
|
|
3254
3251
|
is_local = _is_local_machine(machine)
|