code-coordinator 0.5.499__tar.gz → 0.5.500__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.499 → code_coordinator-0.5.500}/.github/workflows/test.yml +28 -6
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/PKG-INFO +1 -1
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/code_coordinator.egg-info/SOURCES.txt +3 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/code_coordinator.egg-info/scm_file_list.json +3 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/agent_app.py +51 -4
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/agent_update.py +3 -2
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/agent_ops.py +49 -10
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/release.py +22 -7
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/status.py +12 -2
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/config.py +18 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/machine_onboard.py +52 -3
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/models.py +13 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/release_verify.py +4 -2
- code_coordinator-0.5.500/coord/restart_cmd.py +120 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/MAC_MINI.md +10 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_app.py +17 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_deploy_units_endpoint.py +34 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_update.py +33 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_release_propagate.py +24 -0
- code_coordinator-0.5.500/tests/test_cli_status_supervisor_3366.py +91 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_config.py +36 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_machine_onboard.py +26 -0
- code_coordinator-0.5.500/tests/test_restart_cmd.py +88 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_windows_job_is_a_real_gate_2000.py +46 -11
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/.gitignore +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/CLAUDE.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/GOAL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/LICENSE +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/MANIFEST.in +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/README.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/__init__.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/agent.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/audit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/backup.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/block_log.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/board_service.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/brain.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/claim.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/cli.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/client.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/codegen.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/comments.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dao.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/db.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/deps.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/drive.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/events.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/filelock.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/freshness.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/gates.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/goal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/context.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/models.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/render.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/health/units.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/hooks.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/interactive.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/network.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/notify.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/openapi.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/parentage.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/plans.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/progress.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/release_window.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/reports.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/review.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/self_health.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/smoke.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/split_work.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/sql.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/state.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/test_author.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/test_report.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/usage.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/install-agent.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/pyproject.toml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/setup.cfg +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/__init__.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/backends.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/conftest.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_client.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_db.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_events.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_init.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_models.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_network.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_review.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_session.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_split.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_state.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.499 → code_coordinator-0.5.500}/tests/write_parity.py +0 -0
|
@@ -111,12 +111,34 @@ jobs:
|
|
|
111
111
|
# — the matrix axis there is Python versions on Linux; this job's axis is
|
|
112
112
|
# the platform. See docs/CROSS_PLATFORM.md §9.
|
|
113
113
|
windows:
|
|
114
|
-
# #
|
|
115
|
-
#
|
|
116
|
-
#
|
|
117
|
-
#
|
|
118
|
-
#
|
|
119
|
-
|
|
114
|
+
# #3394, 2026-09-18: taken out of automatic CI by operator decision —
|
|
115
|
+
# Windows is not current work. Everything in the block above about this
|
|
116
|
+
# being a real gate (#2000) remains true of the job's SHAPE and is
|
|
117
|
+
# deliberately left intact; what changed is WHEN it runs.
|
|
118
|
+
#
|
|
119
|
+
# Why: it has failed every run sampled back to 2026-09-10 (~614
|
|
120
|
+
# AssertionError plus WinError / BackupError / FileNotFoundError / OSError,
|
|
121
|
+
# concentrated in tests/test_dr_azure_scripts.py and tests/test_agent.py).
|
|
122
|
+
# A gate that is always red gates nothing — it only kept `main` permanently
|
|
123
|
+
# red, at ~85 min of runner time per push, and that permanent redness is
|
|
124
|
+
# what made coord mark every branch baseline-red and SKIP its test stage
|
|
125
|
+
# while the gate still reported `test: passed`. #3378 item 1, #3380 and
|
|
126
|
+
# #3385 were all scoped as "make main green" and all misattributed that
|
|
127
|
+
# redness to the (advisory) postgres job.
|
|
128
|
+
#
|
|
129
|
+
# The #2039 note this replaces still describes the restore target: on
|
|
130
|
+
# `push` only, so the job is SKIPPED on `pull_request` — conclusion
|
|
131
|
+
# `skipped`, already in `ci_store._PASSING_CONCLUSIONS`, so a red Windows
|
|
132
|
+
# run surfaces on main and never blocks a PR. `windows` is not a required
|
|
133
|
+
# status check either, so branch protection is unaffected in either shape.
|
|
134
|
+
#
|
|
135
|
+
# RESTORE by putting `github.event_name == 'push'` back here when Windows
|
|
136
|
+
# becomes active work — THEN fix the ~614 failures. Only once it is green
|
|
137
|
+
# is it a gate again. Do NOT add `continue-on-error` as a shortcut: #2026
|
|
138
|
+
# found that softens the run conclusion while the check still reports
|
|
139
|
+
# `failure` to the Checks API, which stalled the whole drive queue
|
|
140
|
+
# overnight on 2026-08-08.
|
|
141
|
+
if: github.event_name == 'workflow_dispatch'
|
|
120
142
|
runs-on: windows-latest
|
|
121
143
|
steps:
|
|
122
144
|
- uses: actions/checkout@v4
|
|
@@ -143,6 +143,7 @@ coord/repo_edit.py
|
|
|
143
143
|
coord/repo_onboard.py
|
|
144
144
|
coord/reports.py
|
|
145
145
|
coord/rest_schema.py
|
|
146
|
+
coord/restart_cmd.py
|
|
146
147
|
coord/revalidate.py
|
|
147
148
|
coord/review.py
|
|
148
149
|
coord/scorecard.py
|
|
@@ -541,6 +542,7 @@ tests/test_cli_status_merge_queue.py
|
|
|
541
542
|
tests/test_cli_status_provider.py
|
|
542
543
|
tests/test_cli_status_retried_3340.py
|
|
543
544
|
tests/test_cli_status_review_finalizing.py
|
|
545
|
+
tests/test_cli_status_supervisor_3366.py
|
|
544
546
|
tests/test_cli_status_test_failed_tag.py
|
|
545
547
|
tests/test_cli_status_usage_limit.py
|
|
546
548
|
tests/test_cli_sync_comments_873.py
|
|
@@ -786,6 +788,7 @@ tests/test_repo_graph_fleet_2237.py
|
|
|
786
788
|
tests/test_repo_onboard_2220.py
|
|
787
789
|
tests/test_report_result_push.py
|
|
788
790
|
tests/test_reports.py
|
|
791
|
+
tests/test_restart_cmd.py
|
|
789
792
|
tests/test_retry.py
|
|
790
793
|
tests/test_retry_advisory_1606.py
|
|
791
794
|
tests/test_retry_escalation_classify_3360.py
|
{code_coordinator-0.5.499 → code_coordinator-0.5.500}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -257,6 +257,7 @@
|
|
|
257
257
|
"coord/repo_onboard.py",
|
|
258
258
|
"coord/reports.py",
|
|
259
259
|
"coord/rest_schema.py",
|
|
260
|
+
"coord/restart_cmd.py",
|
|
260
261
|
"coord/revalidate.py",
|
|
261
262
|
"coord/review.py",
|
|
262
263
|
"coord/scorecard.py",
|
|
@@ -567,6 +568,7 @@
|
|
|
567
568
|
"tests/test_cli_status_provider.py",
|
|
568
569
|
"tests/test_cli_status_retried_3340.py",
|
|
569
570
|
"tests/test_cli_status_review_finalizing.py",
|
|
571
|
+
"tests/test_cli_status_supervisor_3366.py",
|
|
570
572
|
"tests/test_cli_status_test_failed_tag.py",
|
|
571
573
|
"tests/test_cli_status_usage_limit.py",
|
|
572
574
|
"tests/test_cli_sync_comments_873.py",
|
|
@@ -812,6 +814,7 @@
|
|
|
812
814
|
"tests/test_repo_onboard_2220.py",
|
|
813
815
|
"tests/test_report_result_push.py",
|
|
814
816
|
"tests/test_reports.py",
|
|
817
|
+
"tests/test_restart_cmd.py",
|
|
815
818
|
"tests/test_retry.py",
|
|
816
819
|
"tests/test_retry_advisory_1606.py",
|
|
817
820
|
"tests/test_retry_escalation_classify_3360.py",
|
|
@@ -7,6 +7,7 @@ import json
|
|
|
7
7
|
import logging
|
|
8
8
|
import os
|
|
9
9
|
import re
|
|
10
|
+
import shutil
|
|
10
11
|
import subprocess
|
|
11
12
|
import sys
|
|
12
13
|
import threading
|
|
@@ -20,7 +21,7 @@ from starlette.requests import Request
|
|
|
20
21
|
from starlette.responses import JSONResponse, PlainTextResponse, Response, StreamingResponse
|
|
21
22
|
from starlette.routing import Route
|
|
22
23
|
|
|
23
|
-
from coord import __version__, agent_update
|
|
24
|
+
from coord import __version__, agent_update, restart_cmd
|
|
24
25
|
from coord.agent import RUNNING, PENDING, AgentAssignment, AgentServer, AssignmentSpec
|
|
25
26
|
from coord.dist_name import DistributionNotFoundError, resolve_installed, resolve_installed_name
|
|
26
27
|
from coord.dist_name import pkg_spec as _dist_pkg_spec
|
|
@@ -129,8 +130,13 @@ def _running_under_systemd() -> bool:
|
|
|
129
130
|
``INVOCATION_ID`` is set by systemd for every unit invocation (since
|
|
130
131
|
v232) and is the standard "am I running under systemd" signal — unlike
|
|
131
132
|
checking the parent PID, it survives the process being reparented.
|
|
133
|
+
|
|
134
|
+
Delegates to :mod:`coord.restart_cmd` (#3366) — the single place that
|
|
135
|
+
answers this, shared with the SSH-side escalation and every
|
|
136
|
+
operator-facing remediation string, so this process's own idea of its
|
|
137
|
+
supervisor can never drift from what those tell an operator.
|
|
132
138
|
"""
|
|
133
|
-
return
|
|
139
|
+
return restart_cmd.running_under_systemd()
|
|
134
140
|
|
|
135
141
|
|
|
136
142
|
def _systemctl_env() -> dict[str, str]:
|
|
@@ -1157,6 +1163,12 @@ def build_app(
|
|
|
1157
1163
|
# liveness or PID.
|
|
1158
1164
|
data["version"] = __version__
|
|
1159
1165
|
data["installed_version"] = _installed_version()
|
|
1166
|
+
# #3366: this process's own live self-report of what supervises
|
|
1167
|
+
# it — "systemd", "launchd", or null when neither is known (a dev
|
|
1168
|
+
# box, Windows). The freshest possible answer to "what restarts
|
|
1169
|
+
# this host," ahead of any static config an operator may also set
|
|
1170
|
+
# (see `coord.restart_cmd.resolve_supervisor`).
|
|
1171
|
+
data["supervisor"] = restart_cmd.local_supervisor()
|
|
1160
1172
|
# Surface the most recent /update attempt so the CLI can show
|
|
1161
1173
|
# "0.3.0 → 0.4.0" or "no_change (0.3.0)" or "failed: <error>".
|
|
1162
1174
|
last = _read_last_update(server.state_dir)
|
|
@@ -1625,6 +1637,33 @@ def build_app(
|
|
|
1625
1637
|
body = {}
|
|
1626
1638
|
dry_run = bool(body.get("dry_run"))
|
|
1627
1639
|
|
|
1640
|
+
# #3366: this whole lane is systemd-unit management — on a host
|
|
1641
|
+
# with no `systemctl` at all (every macOS agent today; #1158's
|
|
1642
|
+
# launchd port ships no unit-file equivalent) every one of the
|
|
1643
|
+
# packaged units reads as "new"/"not installed here", every run,
|
|
1644
|
+
# forever. That is not drift, it is the platform, and reporting it
|
|
1645
|
+
# as drift-adjacent noise on every propagation trains the operator
|
|
1646
|
+
# to ignore this lane. Short-circuit with an honest n/a instead of
|
|
1647
|
+
# calling into `du.install_units`, which has no way to tell "not
|
|
1648
|
+
# installed yet" apart from "cannot ever be installed here".
|
|
1649
|
+
if shutil.which("systemctl") is None:
|
|
1650
|
+
supervisor = restart_cmd.local_supervisor()
|
|
1651
|
+
return JSONResponse(
|
|
1652
|
+
{
|
|
1653
|
+
"ok": True,
|
|
1654
|
+
"units": [],
|
|
1655
|
+
"dry_run": dry_run,
|
|
1656
|
+
"reloaded": False,
|
|
1657
|
+
"reload_detail": "",
|
|
1658
|
+
"timers_enabled": {},
|
|
1659
|
+
"detail": (
|
|
1660
|
+
f"n/a — no systemd on this host (supervisor: "
|
|
1661
|
+
f"{supervisor or 'unknown'})"
|
|
1662
|
+
),
|
|
1663
|
+
},
|
|
1664
|
+
status_code=200,
|
|
1665
|
+
)
|
|
1666
|
+
|
|
1628
1667
|
report = du.install_units(
|
|
1629
1668
|
machine_name=getattr(server, "machine_name", None),
|
|
1630
1669
|
port=AGENT_PORT,
|
|
@@ -1714,12 +1753,20 @@ def build_app(
|
|
|
1714
1753
|
)
|
|
1715
1754
|
|
|
1716
1755
|
if not _running_under_systemd():
|
|
1756
|
+
# #3366: name the actual supervisor, when known, instead of
|
|
1757
|
+
# only ever saying what this ISN'T (systemd) — a launchd host
|
|
1758
|
+
# reads as clearly out of scope for a systemd-only lane rather
|
|
1759
|
+
# than as unexplained drift-adjacent noise on every run.
|
|
1760
|
+
supervisor = restart_cmd.local_supervisor()
|
|
1717
1761
|
return JSONResponse(
|
|
1718
1762
|
{
|
|
1719
1763
|
"units": {},
|
|
1720
1764
|
"detail": (
|
|
1721
|
-
"this agent
|
|
1722
|
-
"can restart a sibling unit"
|
|
1765
|
+
f"this agent runs under {supervisor}, not systemd — "
|
|
1766
|
+
"nothing here can restart a sibling unit"
|
|
1767
|
+
if supervisor
|
|
1768
|
+
else "this agent is not running under systemd — nothing "
|
|
1769
|
+
"here can restart a sibling unit"
|
|
1723
1770
|
),
|
|
1724
1771
|
},
|
|
1725
1772
|
status_code=200,
|
|
@@ -85,6 +85,7 @@ import sys
|
|
|
85
85
|
from dataclasses import dataclass
|
|
86
86
|
from pathlib import Path
|
|
87
87
|
|
|
88
|
+
from coord import restart_cmd
|
|
88
89
|
from coord.platform_paths import venv_exe, venv_pip, venv_python
|
|
89
90
|
|
|
90
91
|
_log = logging.getLogger(__name__)
|
|
@@ -698,8 +699,8 @@ def perform_update(
|
|
|
698
699
|
f"and rebuild — {listed}. Replacing a running process's "
|
|
699
700
|
"site-packages leaves it executing a mix of two versions (the "
|
|
700
701
|
"2026-08-11 dellserver incident, #2121). Restart or stop those "
|
|
701
|
-
"processes —
|
|
702
|
-
"agent — and retry.",
|
|
702
|
+
f"processes — {restart_cmd.restart_hint(restart_cmd.local_supervisor())} "
|
|
703
|
+
"for the agent — and retry.",
|
|
703
704
|
holders=[
|
|
704
705
|
{"pid": h.pid, "source": h.source, "cmdline": h.cmdline}
|
|
705
706
|
for h in holders[:20]
|
|
@@ -16,7 +16,7 @@ from typing import TYPE_CHECKING, Any
|
|
|
16
16
|
import click
|
|
17
17
|
import httpx
|
|
18
18
|
|
|
19
|
-
from coord import __version__
|
|
19
|
+
from coord import __version__, restart_cmd
|
|
20
20
|
# Aliased: `agent_update` is also the name of this module's click command.
|
|
21
21
|
from coord.agent_update import cli_initiator as _cli_initiator
|
|
22
22
|
from coord.config import Config
|
|
@@ -726,10 +726,12 @@ def agent_update(
|
|
|
726
726
|
err = outcome.get("error") or "pip failed; see ~/.coord/last_update.log"
|
|
727
727
|
click.echo(f" {machine.name}: ✗ failed — {err}", err=True)
|
|
728
728
|
elif outcome.get("escalated"):
|
|
729
|
+
hint = restart_cmd.resolve_supervisor(machine, live=outcome.get("supervisor"))
|
|
729
730
|
click.echo(
|
|
730
731
|
f" {machine.name}: ✗ pip upgraded to {target_version} but the "
|
|
731
|
-
f"process is stuck reporting {version_now} even after a "
|
|
732
|
-
"
|
|
732
|
+
f"process is stuck reporting {version_now} even after a driven "
|
|
733
|
+
f"restart ({restart_cmd.restart_shell_command(hint)}) — needs "
|
|
734
|
+
"manual investigation",
|
|
733
735
|
err=True,
|
|
734
736
|
)
|
|
735
737
|
elif not outcome.get("came_online"):
|
|
@@ -743,12 +745,15 @@ def agent_update(
|
|
|
743
745
|
# Distinguishing this from a bare "still reporting X"
|
|
744
746
|
# is the whole point: it says the process needs a
|
|
745
747
|
# restart, not another pip attempt.
|
|
748
|
+
hint = restart_cmd.resolve_supervisor(
|
|
749
|
+
machine, live=outcome.get("supervisor")
|
|
750
|
+
)
|
|
746
751
|
click.echo(
|
|
747
752
|
f" {machine.name}: ✗ installed {installed_now} but the "
|
|
748
753
|
f"running process still reports {version_now} (expected "
|
|
749
754
|
f"{target_version}) — it hasn't restarted since the "
|
|
750
|
-
"update; try
|
|
751
|
-
"
|
|
755
|
+
f"update; try {restart_cmd.restart_hint(hint)} on that "
|
|
756
|
+
"machine",
|
|
752
757
|
err=True,
|
|
753
758
|
)
|
|
754
759
|
else:
|
|
@@ -1169,6 +1174,7 @@ def _wait_agents_updated(
|
|
|
1169
1174
|
"result": None,
|
|
1170
1175
|
"error": None,
|
|
1171
1176
|
"escalated": False,
|
|
1177
|
+
"supervisor": None,
|
|
1172
1178
|
}
|
|
1173
1179
|
for m in machines
|
|
1174
1180
|
}
|
|
@@ -1199,6 +1205,11 @@ def _wait_agents_updated(
|
|
|
1199
1205
|
info["result"] = last.get("result")
|
|
1200
1206
|
info["error"] = last.get("error")
|
|
1201
1207
|
info["version_before"] = last.get("version_before")
|
|
1208
|
+
# #3366: the agent's own live self-report — when this ever
|
|
1209
|
+
# disagrees with the machine's static `supervisor:` config, this
|
|
1210
|
+
# wins (see `restart_cmd.resolve_supervisor`), because it's the
|
|
1211
|
+
# host answering right now, not a fact someone typed once.
|
|
1212
|
+
info["supervisor"] = health.get("supervisor")
|
|
1202
1213
|
|
|
1203
1214
|
if machine.name in pre:
|
|
1204
1215
|
pre_val = pre[machine.name]
|
|
@@ -1255,7 +1266,8 @@ def _wait_agents_updated(
|
|
|
1255
1266
|
|
|
1256
1267
|
|
|
1257
1268
|
def _escalate_restart(machine) -> bool:
|
|
1258
|
-
"""Best-effort
|
|
1269
|
+
"""Best-effort driven restart of ``coord-agent`` over SSH — systemd or
|
|
1270
|
+
launchd, whichever the target host actually runs (#3366).
|
|
1259
1271
|
|
|
1260
1272
|
#404 / #1568: ``/update``'s ``os.execv`` self-restart does not take
|
|
1261
1273
|
under systemd — same PID, stale version. ``XDG_RUNTIME_DIR=/run/user/
|
|
@@ -1263,17 +1275,44 @@ def _escalate_restart(machine) -> bool:
|
|
|
1263
1275
|
silently no-ops in a non-interactive SSH session. See
|
|
1264
1276
|
docs/AGENT_OPERATIONS.md for the manual runbook this automates.
|
|
1265
1277
|
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
/
|
|
1278
|
+
#3366: macOS ships no systemd at all, so the command above always
|
|
1279
|
+
failed there — this was the whole escalation channel, and a fleet mac
|
|
1280
|
+
(``docs/MAC_MINI.md``) simply had none: no automated recovery, and
|
|
1281
|
+
every operator-facing message also only ever named ``systemctl``. The
|
|
1282
|
+
working command is ``launchctl kickstart -k gui/<uid>/<label>``
|
|
1283
|
+
(:mod:`coord.restart_cmd`). Rather than branching ahead of time on
|
|
1284
|
+
possibly-stale config, the remote shell tries systemd FIRST — zero
|
|
1285
|
+
behaviour change for the rest of the fleet — and only falls back to
|
|
1286
|
+
launchd when ``systemctl`` genuinely isn't there to ask, discovering
|
|
1287
|
+
the real launchd Label from the host's own plist (falling back to
|
|
1288
|
+
:data:`coord.restart_cmd.LAUNCHD_LABEL` only if that read fails) so
|
|
1289
|
+
this keeps working even if a second mac ever uses a different label.
|
|
1290
|
+
|
|
1291
|
+
Returns True if a restart command itself exited 0 on the target host —
|
|
1292
|
+
NOT whether the agent actually came back on the new version; the
|
|
1293
|
+
caller re-polls /health afterwards to confirm that.
|
|
1269
1294
|
"""
|
|
1295
|
+
from coord.restart_cmd import LAUNCHD_LABEL # noqa: PLC0415
|
|
1296
|
+
|
|
1297
|
+
remote_script = (
|
|
1298
|
+
"if command -v systemctl >/dev/null 2>&1 && "
|
|
1299
|
+
"XDG_RUNTIME_DIR=/run/user/$(id -u) systemctl --user restart coord-agent "
|
|
1300
|
+
"2>/dev/null; then exit 0; fi; "
|
|
1301
|
+
'plist=$(ls "$HOME/Library/LaunchAgents"/*coord-agent*.plist 2>/dev/null | head -1); '
|
|
1302
|
+
'if [ -n "$plist" ]; then '
|
|
1303
|
+
"label=$(/usr/libexec/PlistBuddy -c 'Print :Label' \"$plist\" 2>/dev/null); "
|
|
1304
|
+
f'label="${{label:-{LAUNCHD_LABEL}}}"; '
|
|
1305
|
+
'exec launchctl kickstart -k "gui/$(id -u)/$label"; '
|
|
1306
|
+
"fi; "
|
|
1307
|
+
"exit 1"
|
|
1308
|
+
)
|
|
1270
1309
|
cmd = [
|
|
1271
1310
|
"ssh",
|
|
1272
1311
|
"-o", "BatchMode=yes",
|
|
1273
1312
|
"-o", "ConnectTimeout=10",
|
|
1274
1313
|
"-o", "StrictHostKeyChecking=accept-new",
|
|
1275
1314
|
machine.host,
|
|
1276
|
-
|
|
1315
|
+
remote_script,
|
|
1277
1316
|
]
|
|
1278
1317
|
try:
|
|
1279
1318
|
result = subprocess.run(cmd, capture_output=True, text=True, timeout=20)
|
|
@@ -24,6 +24,7 @@ from typing import Any
|
|
|
24
24
|
|
|
25
25
|
import click
|
|
26
26
|
|
|
27
|
+
from coord import restart_cmd
|
|
27
28
|
from coord.commands._common import _CONFIG_OPTION
|
|
28
29
|
|
|
29
30
|
|
|
@@ -1779,9 +1780,11 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
1779
1780
|
"ROLLBACK LEFT AGENTS DOWN: "
|
|
1780
1781
|
+ ", ".join(down)
|
|
1781
1782
|
+ " — these hosts answered the rollback but never came back "
|
|
1782
|
-
"on /health, and
|
|
1783
|
-
"
|
|
1784
|
-
"
|
|
1783
|
+
"on /health, and a driven SSH restart (systemd "
|
|
1784
|
+
f"({restart_cmd.restart_shell_command(restart_cmd.SYSTEMD)}) or "
|
|
1785
|
+
f"launchd ({restart_cmd.restart_shell_command(restart_cmd.LAUNCHD)}), "
|
|
1786
|
+
"whichever applies) did not revive them either. Recover by "
|
|
1787
|
+
"hand before anything else."
|
|
1785
1788
|
)
|
|
1786
1789
|
click.echo(f"error: {record.error}", err=True)
|
|
1787
1790
|
_finish(rp.STATUS_ROLLED_BACK, 2)
|
|
@@ -2715,6 +2718,16 @@ def _roll_units(machine, *, agent_port: int) -> tuple[bool | None, str]:
|
|
|
2715
2718
|
# report" / a false-positive success.
|
|
2716
2719
|
if status != 200 and not (status == 500 and "units" in body):
|
|
2717
2720
|
return False, str(body.get("error") or body.get("summary") or f"HTTP {status}")
|
|
2721
|
+
# #3366: the agent itself already told us this host has no systemd to
|
|
2722
|
+
# deploy units onto (see `agent_app.py`'s `deploy_units` handler) —
|
|
2723
|
+
# every packaged unit reading as "new"/"not installed here" on THAT
|
|
2724
|
+
# host, every run, is the platform, not drift, so this is a structural
|
|
2725
|
+
# gap like the pre-#1835 404 branch above, not a failed lane: `None`,
|
|
2726
|
+
# same "not accountable for a lane it cannot roll" verdict #2052
|
|
2727
|
+
# already established for that case.
|
|
2728
|
+
detail = str(body.get("detail") or "")
|
|
2729
|
+
if detail.startswith("n/a"):
|
|
2730
|
+
return None, detail
|
|
2718
2731
|
units = body.get("units") or []
|
|
2719
2732
|
changed = [u.get("name") for u in units if u.get("action") == "updated"]
|
|
2720
2733
|
new = [u.get("name") for u in units if u.get("action") == "new"]
|
|
@@ -3111,8 +3124,9 @@ def _rollback_host(
|
|
|
3111
3124
|
)
|
|
3112
3125
|
if back:
|
|
3113
3126
|
return _back_on_target(
|
|
3114
|
-
|
|
3115
|
-
f"
|
|
3127
|
+
"rolled back; agent needed a driven SSH restart "
|
|
3128
|
+
f"({restart_cmd.restart_hint(restart_cmd.resolve_supervisor(machine))}) "
|
|
3129
|
+
f"but is serving again on v{version}"
|
|
3116
3130
|
)
|
|
3117
3131
|
return False, (
|
|
3118
3132
|
"rolled back the venv but the agent is DOWN — it never came back on "
|
|
@@ -3120,8 +3134,9 @@ def _rollback_host(
|
|
|
3120
3134
|
+ (
|
|
3121
3135
|
"the SSH restart did not revive it"
|
|
3122
3136
|
if escalated
|
|
3123
|
-
else "the SSH
|
|
3124
|
-
"
|
|
3137
|
+
else "the SSH "
|
|
3138
|
+
f"{restart_cmd.restart_hint(restart_cmd.resolve_supervisor(machine))} "
|
|
3139
|
+
"escalation could not run"
|
|
3125
3140
|
)
|
|
3126
3141
|
+ f". Recover by hand on {machine.name}."
|
|
3127
3142
|
)
|
|
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
|
|
|
10
10
|
|
|
11
11
|
import click
|
|
12
12
|
|
|
13
|
-
from coord import __version__, github_ops
|
|
13
|
+
from coord import __version__, github_ops, restart_cmd
|
|
14
14
|
|
|
15
15
|
from coord.commands._common import _CONFIG_OPTION, _load_config
|
|
16
16
|
|
|
@@ -375,6 +375,16 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
|
|
|
375
375
|
version_line = f" agent-version: {agent_version} ⚠ (coord is {__version__})"
|
|
376
376
|
else:
|
|
377
377
|
version_line = f" agent-version: {agent_version}"
|
|
378
|
+
# #3366: surface the non-default supervisor (launchd) up front,
|
|
379
|
+
# before it matters — "this agent is not running under systemd"
|
|
380
|
+
# used to only ever show up mid-incident, buried in a propagate
|
|
381
|
+
# run's output. Silent for the systemd case: that's every other
|
|
382
|
+
# machine in the fleet today, and naming it there would just be
|
|
383
|
+
# noise on every `coord status`.
|
|
384
|
+
live_supervisor = s.health.get("supervisor") if s.is_online and s.health else None
|
|
385
|
+
supervisor = restart_cmd.resolve_supervisor(m, live=live_supervisor)
|
|
386
|
+
if supervisor == restart_cmd.LAUNCHD:
|
|
387
|
+
version_line += " supervisor: launchd"
|
|
378
388
|
click.echo(f" host: {m.host} repos: {repos}{version_line}")
|
|
379
389
|
|
|
380
390
|
# #1886 Path B: `/health` exposes `installed_version` (a disk read
|
|
@@ -399,7 +409,7 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
|
|
|
399
409
|
click.echo(
|
|
400
410
|
f" ⚠ running v{running_version} but installed "
|
|
401
411
|
f"v{installed_version} — process hasn't restarted since "
|
|
402
|
-
"its last update (
|
|
412
|
+
f"its last update ({restart_cmd.restart_hint(supervisor)} "
|
|
403
413
|
"on that machine, or `coord agent update` to retry)"
|
|
404
414
|
)
|
|
405
415
|
|
|
@@ -3071,6 +3071,23 @@ def _parse_machines(raw: Any, repos: list[Repo]) -> list[Machine]:
|
|
|
3071
3071
|
entry.get("quiet_hours"), machine_index=i, machine_name=name,
|
|
3072
3072
|
)
|
|
3073
3073
|
|
|
3074
|
+
# #3366: optional fact about which init system supervises this
|
|
3075
|
+
# host's `coord agent` — see `Machine.supervisor`'s docstring for
|
|
3076
|
+
# why it isn't inferred. Validated against the two names
|
|
3077
|
+
# `coord.restart_cmd` actually knows rather than left free-form,
|
|
3078
|
+
# so a typo (`launchD`, `Systemd`) fails config load loudly
|
|
3079
|
+
# instead of silently falling through to the systemd default the
|
|
3080
|
+
# same way an unset field does.
|
|
3081
|
+
machine_supervisor = entry.get("supervisor")
|
|
3082
|
+
if machine_supervisor is not None:
|
|
3083
|
+
if not isinstance(machine_supervisor, str) or machine_supervisor not in (
|
|
3084
|
+
"systemd", "launchd",
|
|
3085
|
+
):
|
|
3086
|
+
raise ConfigError(
|
|
3087
|
+
f"machines[{i}].supervisor must be 'systemd' or 'launchd', "
|
|
3088
|
+
f"got {machine_supervisor!r}"
|
|
3089
|
+
)
|
|
3090
|
+
|
|
3074
3091
|
# #3340: optional per-machine floor for the `/health` reachability
|
|
3075
3092
|
# probe timeout — see `Machine.health_timeout`'s docstring for why
|
|
3076
3093
|
# this exists instead of just raising `network.DEFAULT_TIMEOUT`.
|
|
@@ -3094,6 +3111,7 @@ def _parse_machines(raw: Any, repos: list[Repo]) -> list[Machine]:
|
|
|
3094
3111
|
max_workers=machine_max_workers,
|
|
3095
3112
|
quiet_hours=quiet_hours,
|
|
3096
3113
|
health_timeout=machine_health_timeout,
|
|
3114
|
+
supervisor=machine_supervisor,
|
|
3097
3115
|
)
|
|
3098
3116
|
)
|
|
3099
3117
|
return machines
|
|
@@ -96,6 +96,7 @@ from typing import TYPE_CHECKING
|
|
|
96
96
|
# vocabulary is imported rather than restated so a third role added there
|
|
97
97
|
# needs no edit here, and so no second default can drift into existence.
|
|
98
98
|
from coord.deploy_manifest import ROLE_DAEMON, ROLE_WORKER
|
|
99
|
+
from coord import restart_cmd
|
|
99
100
|
|
|
100
101
|
if TYPE_CHECKING: # pragma: no cover — typing only
|
|
101
102
|
from coord.config import Config
|
|
@@ -419,6 +420,11 @@ class MachineFacts:
|
|
|
419
420
|
#: Diagnostic only — the verdict comes from the agent's own probes, never
|
|
420
421
|
#: from re-deriving a lookup against this string.
|
|
421
422
|
agent_path: str | None = None
|
|
423
|
+
#: #3366: "systemd" / "launchd" / None (unprobed, or neither finder
|
|
424
|
+
#: found the agent) — which init system supervises this host's agent,
|
|
425
|
+
#: read straight off the SSH probe above (`ShellProbe.supervisor`).
|
|
426
|
+
#: Only known when :attr:`shell_probed` is True.
|
|
427
|
+
supervisor: str | None = None
|
|
422
428
|
|
|
423
429
|
# ── Layer 8: identity ────────────────────────────────────────────────
|
|
424
430
|
identity: IdentityFacts = field(default_factory=IdentityFacts)
|
|
@@ -656,14 +662,27 @@ def _agent_path_from_launchd():
|
|
|
656
662
|
return declared
|
|
657
663
|
|
|
658
664
|
|
|
665
|
+
#: #3366: which finder actually answered the last `discover_agent_path()`
|
|
666
|
+
#: call — "systemd", "launchd", or None (neither found anything). Same
|
|
667
|
+
#: side-channel shape as `_LAUNCHD_LIVE_PATH` above: `discover_agent_path()`
|
|
668
|
+
#: must keep returning a single string (it's shared by two scripts, see the
|
|
669
|
+
#: module comment), so a caller that wants to know WHICH supervisor found
|
|
670
|
+
#: the agent (`OUT["agent_supervisor"]` below, ultimately
|
|
671
|
+
#: `MachineFacts.supervisor`) reads this global right after calling it.
|
|
672
|
+
_AGENT_PATH_SOURCE = None
|
|
673
|
+
|
|
674
|
+
|
|
659
675
|
def discover_agent_path():
|
|
660
676
|
\"\"\"The PATH the coord agent process on THIS host runs with, or None.\"\"\"
|
|
661
|
-
|
|
677
|
+
global _AGENT_PATH_SOURCE
|
|
678
|
+
_AGENT_PATH_SOURCE = None
|
|
679
|
+
for source, finder in (("systemd", _agent_path_from_systemd), ("launchd", _agent_path_from_launchd)):
|
|
662
680
|
try:
|
|
663
681
|
found = finder()
|
|
664
682
|
except Exception:
|
|
665
683
|
found = None
|
|
666
684
|
if found:
|
|
685
|
+
_AGENT_PATH_SOURCE = source
|
|
667
686
|
return found
|
|
668
687
|
return None
|
|
669
688
|
|
|
@@ -961,6 +980,11 @@ OUT["login_path"] = so.strip() or None
|
|
|
961
980
|
# of the #1671 comparison works on a launchd host too, instead of silently
|
|
962
981
|
# reporting None on every mac.
|
|
963
982
|
OUT["agent_path"] = discover_agent_path()
|
|
983
|
+
# #3366: which of the two finders above actually found it — "systemd",
|
|
984
|
+
# "launchd", or null. Lets a PATH-fix remediation on the coordinator side
|
|
985
|
+
# name the right override mechanism (a systemd drop-in vs. the plist's
|
|
986
|
+
# EnvironmentVariables) instead of only ever describing the systemd one.
|
|
987
|
+
OUT["agent_supervisor"] = _AGENT_PATH_SOURCE
|
|
964
988
|
|
|
965
989
|
# ── role: #3128's resolver, on the host that owns the declaration ──────
|
|
966
990
|
try:
|
|
@@ -1112,6 +1136,10 @@ class ShellProbe:
|
|
|
1112
1136
|
login_path_tools: dict[str, str | None] = field(default_factory=dict)
|
|
1113
1137
|
login_path: str | None = None
|
|
1114
1138
|
agent_path: str | None = None
|
|
1139
|
+
#: #3366: "systemd" / "launchd" / None — which finder in
|
|
1140
|
+
#: `_AGENT_PATH_DISCOVERY` actually resolved `agent_path` above, i.e.
|
|
1141
|
+
#: which supervisor is running the agent on the probed host.
|
|
1142
|
+
supervisor: str | None = None
|
|
1115
1143
|
role: str = ROLE_WORKER
|
|
1116
1144
|
role_source: str = "default"
|
|
1117
1145
|
role_valid: bool = True
|
|
@@ -1235,11 +1263,13 @@ def parse_shell_probe(stdout: str) -> ShellProbe:
|
|
|
1235
1263
|
board_reason=_reason("board_reason"),
|
|
1236
1264
|
backup_env_present=_tri("backup_env_present"),
|
|
1237
1265
|
)
|
|
1266
|
+
supervisor_raw = payload.get("agent_supervisor")
|
|
1238
1267
|
return ShellProbe(
|
|
1239
1268
|
role_error=redact(str(role_error)) if role_error else None,
|
|
1240
1269
|
login_path_tools=tools,
|
|
1241
1270
|
login_path=str(payload["login_path"]) if payload.get("login_path") else None,
|
|
1242
1271
|
agent_path=str(payload["agent_path"]) if payload.get("agent_path") else None,
|
|
1272
|
+
supervisor=str(supervisor_raw) if supervisor_raw in ("systemd", "launchd") else None,
|
|
1243
1273
|
role=role,
|
|
1244
1274
|
role_source=str(role_block.get("source") or "default"),
|
|
1245
1275
|
role_valid=bool(role_block.get("valid", True)),
|
|
@@ -1443,6 +1473,7 @@ def gather_facts(
|
|
|
1443
1473
|
facts.login_path_tools = probe.login_path_tools
|
|
1444
1474
|
facts.login_path = probe.login_path
|
|
1445
1475
|
facts.agent_path = probe.agent_path
|
|
1476
|
+
facts.supervisor = probe.supervisor
|
|
1446
1477
|
facts.identity = (
|
|
1447
1478
|
probe.identity if probe.error is None
|
|
1448
1479
|
else IdentityFacts(probed=False, error=probe.error)
|
|
@@ -2313,12 +2344,30 @@ def _toolchain_finding(facts: MachineFacts, prereq: "Prereq") -> Finding:
|
|
|
2313
2344
|
"retries forever, and no board readout says why"
|
|
2314
2345
|
),
|
|
2315
2346
|
subject=prereq.tool,
|
|
2347
|
+
# #3366: the override mechanism itself is supervisor-specific
|
|
2348
|
+
# (a systemd drop-in vs. the launchd plist's own
|
|
2349
|
+
# EnvironmentVariables), not just the trailing restart
|
|
2350
|
+
# command — a launchd host has no `~/.config/systemd/user/`
|
|
2351
|
+
# to write a drop-in into at all. `facts.supervisor` comes
|
|
2352
|
+
# from the same SSH probe that found `agent_path` above, so
|
|
2353
|
+
# this can only be `None` when that probe didn't run
|
|
2354
|
+
# (`--ssh` omitted) or found neither — in which case the
|
|
2355
|
+
# pre-#3366 systemd-only text is exactly right for every
|
|
2356
|
+
# machine that predates this fix.
|
|
2316
2357
|
fix=(
|
|
2358
|
+
f"put {login}'s directory on the AGENT's PATH — edit this "
|
|
2359
|
+
"host's launchd plist's `EnvironmentVariables/PATH` "
|
|
2360
|
+
"(`~/Library/LaunchAgents/*coord-agent*.plist`), then "
|
|
2361
|
+
f"{restart_cmd.restart_hint(restart_cmd.LAUNCHD)}. Fixing "
|
|
2362
|
+
"your login shell's PATH changes nothing: the agent "
|
|
2363
|
+
"never reads it."
|
|
2364
|
+
if facts.supervisor == "launchd"
|
|
2365
|
+
else
|
|
2317
2366
|
f"put {login}'s directory on the AGENT's PATH — a `PATH=` line "
|
|
2318
2367
|
"in ~/.config/systemd/user/coord-agent.service.d/*.conf (or a "
|
|
2319
2368
|
"~/.local/bin shim, as deploy/node-shim.sh does for Node), then "
|
|
2320
|
-
"
|
|
2321
|
-
"shell's PATH changes nothing: the agent never reads it."
|
|
2369
|
+
f"{restart_cmd.restart_hint(restart_cmd.SYSTEMD)}. Fixing your "
|
|
2370
|
+
"login shell's PATH changes nothing: the agent never reads it."
|
|
2322
2371
|
),
|
|
2323
2372
|
)
|
|
2324
2373
|
where = (
|
|
@@ -446,6 +446,19 @@ class Machine:
|
|
|
446
446
|
# caller's requested timeout and this value — a per-machine floor, never
|
|
447
447
|
# a ceiling that could silently shrink a caller's own longer request.
|
|
448
448
|
health_timeout: float | None = None
|
|
449
|
+
# #3366: optional operator-set fact about which init system supervises
|
|
450
|
+
# `coord agent` on this host — "systemd" or "launchd" (see
|
|
451
|
+
# `coord.restart_cmd`). `None` (the default, and every config that
|
|
452
|
+
# predates this field) means "unknown, assume systemd" — the exact
|
|
453
|
+
# pre-#3366 behaviour, never a guess: launchd hosts do not reliably
|
|
454
|
+
# carry any other distinguishing config (macmini's own capabilities
|
|
455
|
+
# are `[python, rust]`, not `macos` — `docs/MAC_MINI.md`), so this is
|
|
456
|
+
# deliberately a fact an operator states, not one inferred. Only
|
|
457
|
+
# consulted as a FALLBACK behind a live `/health` "supervisor"
|
|
458
|
+
# self-report — see `coord.restart_cmd.resolve_supervisor` — and never
|
|
459
|
+
# by the SSH escalation itself, which auto-detects on the target host
|
|
460
|
+
# regardless of what this says.
|
|
461
|
+
supervisor: str | None = None
|
|
449
462
|
|
|
450
463
|
def can_work_on(self, repo_name: str) -> bool:
|
|
451
464
|
return repo_name in self.repos
|