code-coordinator 0.5.500__tar.gz → 0.5.502__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.500 → code_coordinator-0.5.502}/PKG-INFO +1 -1
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/agent.py +188 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/agent_app.py +38 -36
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notify.py +15 -1
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/reconcile.py +13 -1
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/smoke.py +71 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent.py +237 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_smoke.py +110 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/.gitignore +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/CLAUDE.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/GOAL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/LICENSE +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/MANIFEST.in +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/README.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/__init__.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/audit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/backup.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/block_log.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/board_service.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/brain.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/claim.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/cli.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/client.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/codegen.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/comments.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/config.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dao.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/db.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/deps.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/drive.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/events.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/filelock.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/freshness.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/gates.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/goal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/context.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/models.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/render.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/health/units.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/hooks.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/interactive.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/models.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/network.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/openapi.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/parentage.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/plans.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/progress.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/release_window.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/reports.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/review.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/self_health.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/split_work.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/sql.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/state.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/test_author.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/test_report.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/usage.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/install-agent.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/pyproject.toml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/setup.cfg +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/__init__.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/backends.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/conftest.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_client.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_config.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_db.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_events.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_init.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_models.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_network.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_review.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_session.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_split.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_state.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.500 → code_coordinator-0.5.502}/tests/write_parity.py +0 -0
|
@@ -450,6 +450,45 @@ HOST_SLEEP_EXIT = 127
|
|
|
450
450
|
# #2638.
|
|
451
451
|
_DEFAULT_RUNTIME_CEILING_S = 6.0 * 60.0 * 60.0 # 6 hours
|
|
452
452
|
|
|
453
|
+
# #3363: safety margin added on top of the resolved runtime ceiling before
|
|
454
|
+
# `AgentServer._phantom_age_ceiling_s` treats a PENDING/RUNNING record's
|
|
455
|
+
# timestamp as stale enough to investigate. Kept as its own constant so the
|
|
456
|
+
# margin itself doesn't have to be re-derived at both the class-default and
|
|
457
|
+
# per-instance/per-assignment call sites.
|
|
458
|
+
_PHANTOM_AGE_MARGIN_S = 60.0 * 60.0 # 1 hour
|
|
459
|
+
|
|
460
|
+
# #3363: DEFAULT max age a PENDING/RUNNING assignment record is trusted at
|
|
461
|
+
# face value before it is even a *candidate* for phantom finalization —
|
|
462
|
+
# i.e. the floor `AgentServer._phantom_age_ceiling_s` applies when neither
|
|
463
|
+
# this agent's own configured `runtime_ceiling_s` nor the assignment's own
|
|
464
|
+
# `spec.runtime_ceiling_s` raises it further. Nothing but a process restart
|
|
465
|
+
# ever clears `_assignments` — so an entry that never reaches a terminal
|
|
466
|
+
# status (worker killed out from under it, dispatch crashed between insert
|
|
467
|
+
# and spawn, a stop that didn't write back) stays "active" forever, which
|
|
468
|
+
# is exactly what makes it dangerous: every restart path (`/update`,
|
|
469
|
+
# `/rollback`, the #2139 idle watcher) refuses to act while ANY assignment
|
|
470
|
+
# looks active, so a single phantom permanently blocks the one thing — a
|
|
471
|
+
# restart — that would clear it.
|
|
472
|
+
#
|
|
473
|
+
# #3363 review: this constant alone is NOT the last word on whether a
|
|
474
|
+
# record is a phantom, for two reasons `_phantom_age_ceiling_s` and
|
|
475
|
+
# `AgentServer._active_assignment_ids` handle explicitly:
|
|
476
|
+
# 1. An operator can legitimately raise or disable the runtime ceiling
|
|
477
|
+
# per agent (`self.runtime_ceiling_s`) or per leg
|
|
478
|
+
# (`AssignmentSpec.runtime_ceiling_s`) — both documented, supported
|
|
479
|
+
# overrides (`coord/config.py:252-263`). A hardcoded module constant
|
|
480
|
+
# here would silently override that choice and finalize a real,
|
|
481
|
+
# healthy, still-running leg. `_phantom_age_ceiling_s` resolves the
|
|
482
|
+
# actual per-assignment ceiling instead of trusting this default
|
|
483
|
+
# unconditionally.
|
|
484
|
+
# 2. Age is unconfirmed death, never proof of it. `_active_assignment_ids`
|
|
485
|
+
# only finalizes a record whose process is CONFIRMED not alive
|
|
486
|
+
# (`self._processes.get(aid)` is missing or `proc.poll() is not None`)
|
|
487
|
+
# — a record whose process is still alive is left alone regardless of
|
|
488
|
+
# how stale its timestamp looks, exactly the ground-truth check
|
|
489
|
+
# `cancel()`/`_reap` already use elsewhere in this class.
|
|
490
|
+
_PHANTOM_ASSIGNMENT_MAX_AGE_S = _DEFAULT_RUNTIME_CEILING_S + _PHANTOM_AGE_MARGIN_S # 7 hours
|
|
491
|
+
|
|
453
492
|
# Minimum wall-vs-monotonic divergence measured over a SINGLE poll interval
|
|
454
493
|
# that is unambiguously a host suspend rather than ordinary thread-scheduling
|
|
455
494
|
# jitter, a GC pause, or a loaded box briefly starving this thread. Comfortably
|
|
@@ -3402,6 +3441,15 @@ class AgentAssignment:
|
|
|
3402
3441
|
spec: AssignmentSpec
|
|
3403
3442
|
status: str = PENDING
|
|
3404
3443
|
pid: int | None = None
|
|
3444
|
+
# #3363: stamped once, at construction, so a PENDING assignment (no
|
|
3445
|
+
# `started_at` yet — that's only set once it reaches RUNNING) still has
|
|
3446
|
+
# an age `active_assignment_count()`'s phantom check can measure.
|
|
3447
|
+
# Reloaded PENDING/RUNNING entries from a persisted state file never
|
|
3448
|
+
# keep this value in practice: `_load_state` already force-fails any
|
|
3449
|
+
# PENDING/RUNNING record it finds (the owning subprocess is provably
|
|
3450
|
+
# gone across a restart), so a missing/stale `created_at` on an old
|
|
3451
|
+
# state file is harmless.
|
|
3452
|
+
created_at: float = field(default_factory=time.time)
|
|
3405
3453
|
started_at: float | None = None
|
|
3406
3454
|
finished_at: float | None = None
|
|
3407
3455
|
exit_code: int | None = None
|
|
@@ -7356,6 +7404,146 @@ class AgentServer:
|
|
|
7356
7404
|
cargo_cache.write_gc_status(self.state_dir, result)
|
|
7357
7405
|
return result
|
|
7358
7406
|
|
|
7407
|
+
def active_assignment_count(self, *, now: float | None = None) -> int:
|
|
7408
|
+
"""How many assignments are genuinely still in flight right now.
|
|
7409
|
+
|
|
7410
|
+
#3363: the ONE predicate every "is this host busy" surface must
|
|
7411
|
+
call. Before this, `_idle_restart_target`, `/update`'s post-swap
|
|
7412
|
+
busy check, and `/rollback`'s busy check (all in
|
|
7413
|
+
`coord/agent_app.py`) each independently re-derived
|
|
7414
|
+
``status in (PENDING, RUNNING)`` straight off ``self._assignments``
|
|
7415
|
+
— three copies of the same question, agreeing right up until one of
|
|
7416
|
+
them needed to disagree. A PENDING/RUNNING entry that never reaches
|
|
7417
|
+
a terminal status (worker killed out from under it, a dispatch that
|
|
7418
|
+
crashed between insert and spawn, a stop that didn't write back) is
|
|
7419
|
+
"active" by that raw predicate forever, since nothing but a process
|
|
7420
|
+
restart clears ``_assignments`` — and every restart path above
|
|
7421
|
+
refuses to act while count > 0, so the phantom permanently blocks
|
|
7422
|
+
the one thing that would clear it (see #3363's six-day macmini
|
|
7423
|
+
deadlock).
|
|
7424
|
+
|
|
7425
|
+
Delegates the actual scan (and phantom finalization) to
|
|
7426
|
+
:meth:`_active_assignment_ids`.
|
|
7427
|
+
"""
|
|
7428
|
+
return len(self._active_assignment_ids(now=now))
|
|
7429
|
+
|
|
7430
|
+
def _phantom_age_ceiling_s(self, assignment: AgentAssignment) -> float:
|
|
7431
|
+
"""Resolve the phantom-age ceiling for *this specific* assignment.
|
|
7432
|
+
|
|
7433
|
+
#3363 review: the ceiling used to be the hardcoded module constant
|
|
7434
|
+
``_PHANTOM_ASSIGNMENT_MAX_AGE_S``, sized only off the compile-time
|
|
7435
|
+
``_DEFAULT_RUNTIME_CEILING_S``. That ignored an operator who
|
|
7436
|
+
legitimately raised (or disabled) the runtime ceiling — either
|
|
7437
|
+
fleet-wide (``self.runtime_ceiling_s``) or for this one leg
|
|
7438
|
+
(``AssignmentSpec.runtime_ceiling_s``), both documented, supported
|
|
7439
|
+
overrides (`coord/config.py:252-263`). Mirrors ``_reap``'s own
|
|
7440
|
+
per-leg resolution (~line 9588): a positive ``spec.runtime_ceiling_s``
|
|
7441
|
+
raises the base above this agent's own configured default, then the
|
|
7442
|
+
result is floored at ``_DEFAULT_RUNTIME_CEILING_S`` and the same
|
|
7443
|
+
margin is added — so a higher configured ceiling only ever pushes
|
|
7444
|
+
this watchdog further OUT, never in.
|
|
7445
|
+
|
|
7446
|
+
This only bounds how stale a record is allowed to look before it
|
|
7447
|
+
even becomes a *candidate* for phantom finalization — a record
|
|
7448
|
+
whose process is confirmed still alive is never finalized by
|
|
7449
|
+
``_active_assignment_ids`` regardless of this value (see there), so
|
|
7450
|
+
a leg that legitimately disables its own runtime ceiling is still
|
|
7451
|
+
protected even though this method always returns a finite number.
|
|
7452
|
+
"""
|
|
7453
|
+
base = self.runtime_ceiling_s or 0.0
|
|
7454
|
+
raw_spec_ceiling = getattr(
|
|
7455
|
+
getattr(assignment, "spec", None), "runtime_ceiling_s", None
|
|
7456
|
+
)
|
|
7457
|
+
if isinstance(raw_spec_ceiling, (int, float)) and raw_spec_ceiling > 0:
|
|
7458
|
+
base = max(base, float(raw_spec_ceiling))
|
|
7459
|
+
return max(base, _DEFAULT_RUNTIME_CEILING_S) + _PHANTOM_AGE_MARGIN_S
|
|
7460
|
+
|
|
7461
|
+
def _active_assignment_ids(self, *, now: float | None = None) -> list[str]:
|
|
7462
|
+
"""IDs of assignments still genuinely active, aging out phantoms.
|
|
7463
|
+
|
|
7464
|
+
A PENDING/RUNNING entry older than
|
|
7465
|
+
:meth:`_phantom_age_ceiling_s` (measured from ``started_at`` once
|
|
7466
|
+
RUNNING, ``created_at`` while still PENDING) is a *candidate* for
|
|
7467
|
+
being a leaked bookkeeping record rather than live work — but age
|
|
7468
|
+
alone is never proof of death (#2096: an unconfirmed verdict, in
|
|
7469
|
+
either direction, is a defect). Before finalizing, this consults
|
|
7470
|
+
the same ground truth ``cancel()``/``_reap`` already use elsewhere
|
|
7471
|
+
in this class: ``self._processes.get(aid)``. Only when the process
|
|
7472
|
+
is CONFIRMED not alive (no entry, or ``proc.poll()`` returns a real
|
|
7473
|
+
exit code) is the record excluded from the returned IDs AND
|
|
7474
|
+
finalized in place (flipped to FAILED with an explanatory
|
|
7475
|
+
``error``, ``finished_at`` stamped) so it stops looking active on
|
|
7476
|
+
every other surface too — `/status`, `coord usage`, the board
|
|
7477
|
+
reconciler — not merely in this count. A stale-looking record whose
|
|
7478
|
+
process is still confirmed alive is left completely alone (still
|
|
7479
|
+
counted active, status untouched) — force-finalizing it here would
|
|
7480
|
+
orphan the real subprocess with no WIP push, since a FAILED record
|
|
7481
|
+
no longer shows up in `/restart`'s `pending_ids` scan that would
|
|
7482
|
+
otherwise `cancel(aid, push_mode="branch")` it gracefully.
|
|
7483
|
+
|
|
7484
|
+
Logged at ERROR so it shows up in the agent's own log, since
|
|
7485
|
+
finalizing a phantom is itself a symptom worth an operator noticing
|
|
7486
|
+
(see #3363 suggested fix item 3 — persistent phantoms should
|
|
7487
|
+
eventually surface in `coord release verify`, not just here).
|
|
7488
|
+
"""
|
|
7489
|
+
now = time.time() if now is None else now
|
|
7490
|
+
active: list[str] = []
|
|
7491
|
+
# #3363 review: iterate `.items()` and key off the DICT key, not
|
|
7492
|
+
# `a.id` — a couple of existing tests plant a bare status-only stand-
|
|
7493
|
+
# in object straight into `_assignments` (no `id`/`started_at`/
|
|
7494
|
+
# `created_at` at all) to exercise the busy-veto in isolation.
|
|
7495
|
+
# `getattr(..., None)` below is the same defensiveness applied to
|
|
7496
|
+
# the timestamp reads: a stand-in with no age info reads as age 0
|
|
7497
|
+
# (never a phantom), which preserves every pre-#3363 test's
|
|
7498
|
+
# "PENDING/RUNNING always counts as busy" expectation unchanged.
|
|
7499
|
+
to_finalize: list[tuple[str, AgentAssignment, str, float]] = []
|
|
7500
|
+
with self._lock:
|
|
7501
|
+
for aid, a in self._assignments.items():
|
|
7502
|
+
if a.status not in (PENDING, RUNNING):
|
|
7503
|
+
continue
|
|
7504
|
+
age_ref = (
|
|
7505
|
+
getattr(a, "started_at", None) if a.status == RUNNING
|
|
7506
|
+
else getattr(a, "created_at", None)
|
|
7507
|
+
)
|
|
7508
|
+
age = now - age_ref if age_ref is not None else 0.0
|
|
7509
|
+
if age <= self._phantom_age_ceiling_s(a):
|
|
7510
|
+
active.append(aid)
|
|
7511
|
+
continue
|
|
7512
|
+
# #3363 review: unconfirmed death is the same anti-pattern
|
|
7513
|
+
# (epic #2096) as unconfirmed success — consult the actual
|
|
7514
|
+
# process before declaring this record dead. A live PID
|
|
7515
|
+
# here means real work is still in flight no matter how
|
|
7516
|
+
# stale the bookkeeping timestamp looks, so it stays active
|
|
7517
|
+
# and untouched; the normal `_reap` thread watching that
|
|
7518
|
+
# same process (with its own correctly-resolved runtime
|
|
7519
|
+
# ceiling) remains the one path that ever finalizes it.
|
|
7520
|
+
proc = self._processes.get(aid)
|
|
7521
|
+
if proc is not None and proc.poll() is None:
|
|
7522
|
+
active.append(aid)
|
|
7523
|
+
continue
|
|
7524
|
+
to_finalize.append((aid, a, a.status, age))
|
|
7525
|
+
for _aid, a, _prior_status, age in to_finalize:
|
|
7526
|
+
ceiling = self._phantom_age_ceiling_s(a)
|
|
7527
|
+
a.status = FAILED
|
|
7528
|
+
a.finished_at = now
|
|
7529
|
+
a.error = (
|
|
7530
|
+
f"phantom assignment (#3363): stuck in {_prior_status!r} "
|
|
7531
|
+
f"for {age / 3600.0:.1f}h with no live process behind it, "
|
|
7532
|
+
f"past the {ceiling / 3600.0:.1f}h bookkeeping ceiling "
|
|
7533
|
+
"with no terminal status update — finalized "
|
|
7534
|
+
"automatically so it stops blocking restart"
|
|
7535
|
+
)
|
|
7536
|
+
if to_finalize:
|
|
7537
|
+
for aid, a, prior_status, age in to_finalize:
|
|
7538
|
+
_log.error(
|
|
7539
|
+
"finalizing phantom assignment %s (was %s for %.0fs, "
|
|
7540
|
+
"repo=%s) so it stops blocking restart (#3363)",
|
|
7541
|
+
aid, prior_status, age,
|
|
7542
|
+
getattr(getattr(a, "spec", None), "repo_name", "?"),
|
|
7543
|
+
)
|
|
7544
|
+
self._persist()
|
|
7545
|
+
return active
|
|
7546
|
+
|
|
7359
7547
|
def list_assignments(self) -> dict:
|
|
7360
7548
|
from coord.worker_events import is_stream_json, parse_log
|
|
7361
7549
|
|
|
@@ -593,11 +593,12 @@ def _idle_restart_target(server: "AgentServer", venv_dir: Path) -> Path | None:
|
|
|
593
593
|
# or it's already running the slot the symlink points at — no swap
|
|
594
594
|
# is waiting.
|
|
595
595
|
return None
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
596
|
+
# #3363: shared predicate — see `AgentServer.active_assignment_count`'s
|
|
597
|
+
# docstring for why this must never be re-derived independently here.
|
|
598
|
+
# It also ages out (and finalizes) any phantom PENDING/RUNNING entry,
|
|
599
|
+
# so a leaked bookkeeping record can no longer keep this watcher —
|
|
600
|
+
# the deferred restart's own advertised fallback — permanently idle.
|
|
601
|
+
if server.active_assignment_count():
|
|
601
602
|
return None
|
|
602
603
|
if _host_has_live_interactive_session():
|
|
603
604
|
# #2139 blocking review fix: an interactive pane is not an
|
|
@@ -1538,12 +1539,14 @@ def build_app(
|
|
|
1538
1539
|
# started. Re-read fresh: `perform_update` above can take
|
|
1539
1540
|
# tens of seconds (venv creation, pip, smoke check), so the
|
|
1540
1541
|
# count at the top of this request is stale by now.
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1542
|
+
#
|
|
1543
|
+
# #3363: `active_assignment_count()` is the single shared
|
|
1544
|
+
# predicate (also used by `/rollback` and the idle
|
|
1545
|
+
# watcher's `_idle_restart_target`) — it ages out and
|
|
1546
|
+
# finalizes any phantom PENDING/RUNNING entry instead of
|
|
1547
|
+
# trusting raw status forever, which is what let a single
|
|
1548
|
+
# leaked assignment defer this restart for six days.
|
|
1549
|
+
still_active = server.active_assignment_count()
|
|
1547
1550
|
if still_active and not force:
|
|
1548
1551
|
payload["result"] = "staged"
|
|
1549
1552
|
payload["error"] = (
|
|
@@ -1815,12 +1818,9 @@ def build_app(
|
|
|
1815
1818
|
body = {}
|
|
1816
1819
|
force = bool(body.get("force"))
|
|
1817
1820
|
|
|
1818
|
-
with
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
for a in server._assignments.values()
|
|
1822
|
-
if a.status in (PENDING, RUNNING)
|
|
1823
|
-
)
|
|
1821
|
+
# #3363: shared predicate with `/update` and the idle watcher — see
|
|
1822
|
+
# `AgentServer.active_assignment_count`'s docstring.
|
|
1823
|
+
active_count = server.active_assignment_count()
|
|
1824
1824
|
if active_count and not force:
|
|
1825
1825
|
payload = {
|
|
1826
1826
|
"mode": "rollback",
|
|
@@ -1999,34 +1999,36 @@ def build_app(
|
|
|
1999
1999
|
cancel_timeout = float(body.get("cancel_timeout", 30))
|
|
2000
2000
|
saved_argv = list(sys.argv)
|
|
2001
2001
|
|
|
2002
|
-
with
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2002
|
+
# #3363: shared predicate with `/update`/`/rollback`/the idle
|
|
2003
|
+
# watcher — see `AgentServer.active_assignment_count`'s docstring.
|
|
2004
|
+
# A side benefit here specifically: a phantom entry gets finalized
|
|
2005
|
+
# (flipped to FAILED) the first time this is called, so it no
|
|
2006
|
+
# longer shows up in `pending_ids` below either — this restart
|
|
2007
|
+
# stops trying to `cancel()` a record with no real process behind
|
|
2008
|
+
# it.
|
|
2009
|
+
active_count = server.active_assignment_count()
|
|
2008
2010
|
|
|
2009
2011
|
def _do_restart() -> None:
|
|
2010
2012
|
# Wait for workers to drain.
|
|
2011
2013
|
deadline = time.time() + cancel_timeout
|
|
2012
2014
|
while time.time() < deadline:
|
|
2013
|
-
|
|
2014
|
-
still_active = sum(
|
|
2015
|
-
1
|
|
2016
|
-
for a in server._assignments.values()
|
|
2017
|
-
if a.status in (PENDING, RUNNING)
|
|
2018
|
-
)
|
|
2015
|
+
still_active = server.active_assignment_count()
|
|
2019
2016
|
if still_active == 0:
|
|
2020
2017
|
break
|
|
2021
2018
|
time.sleep(1)
|
|
2022
2019
|
|
|
2023
|
-
# Cancel any workers that are still running.
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2020
|
+
# Cancel any workers that are still running. #3363 review: reuse
|
|
2021
|
+
# the shared predicate rather than re-deriving PENDING/RUNNING
|
|
2022
|
+
# via a second raw scan over `server._assignments` — by now any
|
|
2023
|
+
# true phantom (confirmed-dead process, no terminal status) has
|
|
2024
|
+
# already been finalized to FAILED by the `active_assignment_count()`
|
|
2025
|
+
# polls above, so a raw scan would agree with this today, but a
|
|
2026
|
+
# second copy of the same question right next to the shared
|
|
2027
|
+
# predicate is exactly the split `active_assignment_count()` was
|
|
2028
|
+
# introduced to eliminate — and `_active_assignment_ids()` is the
|
|
2029
|
+
# one that also knows to leave a still-alive process's record
|
|
2030
|
+
# alone rather than mis-scan it as gone.
|
|
2031
|
+
pending_ids = list(server._active_assignment_ids())
|
|
2030
2032
|
for aid in pending_ids:
|
|
2031
2033
|
try:
|
|
2032
2034
|
# #1567: this is an infra-triggered restart, not an
|
|
@@ -4171,12 +4171,26 @@ def _dispatch_board_pending_smoke(config: Config) -> None:
|
|
|
4171
4171
|
passed/failed/skipped verdict and re-dispatch instead of skipping it
|
|
4172
4172
|
forever — without it, the staleness check fails open and this call would
|
|
4173
4173
|
be no more capable than before that fix.
|
|
4174
|
+
|
|
4175
|
+
#3375: also passes a real *issue_liveness_fetcher*
|
|
4176
|
+
(`coord.dispatch_liveness.github_issue_liveness_fetcher`) so the Test
|
|
4177
|
+
stage — which dispatches over `httpx` directly rather than through
|
|
4178
|
+
`coord.dispatch.dispatch()` — gets the SAME "is this issue closed / has
|
|
4179
|
+
this branch already merged" precondition #3376 wired into every other
|
|
4180
|
+
dispatch chokepoint. Without it, this stage stays the one path #3376
|
|
4181
|
+
missed, and the five-smoke-agents-after-merge incident can still recur.
|
|
4174
4182
|
"""
|
|
4175
4183
|
from coord.board_service import read_board, write_board
|
|
4184
|
+
from coord.dispatch_liveness import github_issue_liveness_fetcher
|
|
4176
4185
|
from coord.smoke import dispatch_pending_smoke
|
|
4177
4186
|
|
|
4178
4187
|
board = read_board()
|
|
4179
|
-
dispatched = dispatch_pending_smoke(
|
|
4188
|
+
dispatched = dispatch_pending_smoke(
|
|
4189
|
+
board,
|
|
4190
|
+
config,
|
|
4191
|
+
gh_ops=github_ops,
|
|
4192
|
+
issue_liveness_fetcher=github_issue_liveness_fetcher(config),
|
|
4193
|
+
)
|
|
4180
4194
|
if dispatched:
|
|
4181
4195
|
write_board(board)
|
|
4182
4196
|
|
|
@@ -2699,10 +2699,22 @@ def reconcile(board: Board, config: Config) -> list[str]:
|
|
|
2699
2699
|
# passed/failed/skipped verdict (a rebase moved the base or branch out
|
|
2700
2700
|
# from under it) is re-dispatched instead of skipped forever — without
|
|
2701
2701
|
# it, the staleness check inside `dispatch_pending_smoke` fails open.
|
|
2702
|
+
#
|
|
2703
|
+
# #3375: also passes a real *issue_liveness_fetcher* so `coord resume`
|
|
2704
|
+
# gets the same "issue closed / branch already merged" precondition
|
|
2705
|
+
# #3376 wired into every other dispatch chokepoint — the Test stage
|
|
2706
|
+
# bypasses `coord.dispatch.dispatch()` entirely (a direct `httpx` POST
|
|
2707
|
+
# to `/assign`), so it was the one path #3376 didn't reach.
|
|
2702
2708
|
from coord import github_ops # noqa: PLC0415
|
|
2709
|
+
from coord.dispatch_liveness import github_issue_liveness_fetcher # noqa: PLC0415
|
|
2703
2710
|
from coord.smoke import dispatch_pending_smoke
|
|
2704
2711
|
|
|
2705
|
-
for smoke in dispatch_pending_smoke(
|
|
2712
|
+
for smoke in dispatch_pending_smoke(
|
|
2713
|
+
board,
|
|
2714
|
+
config,
|
|
2715
|
+
gh_ops=github_ops,
|
|
2716
|
+
issue_liveness_fetcher=github_issue_liveness_fetcher(config),
|
|
2717
|
+
):
|
|
2706
2718
|
if smoke.assignment_id is not None:
|
|
2707
2719
|
changed.append(smoke.assignment_id)
|
|
2708
2720
|
|
|
@@ -3033,6 +3033,7 @@ def dispatch_pending_smoke(
|
|
|
3033
3033
|
*,
|
|
3034
3034
|
now: float | None = None,
|
|
3035
3035
|
gh_ops: "GhOps | None" = None,
|
|
3036
|
+
issue_liveness_fetcher: Callable[[str, int], tuple[bool, bool]] | None = None,
|
|
3036
3037
|
) -> list[Assignment]:
|
|
3037
3038
|
"""Bulk Test-stage dispatch — the smoke analogue of
|
|
3038
3039
|
:func:`coord.review.dispatch_pending_reviews`.
|
|
@@ -3064,6 +3065,23 @@ def dispatch_pending_smoke(
|
|
|
3064
3065
|
real :mod:`coord.github_ops` explicitly, the same module every other
|
|
3065
3066
|
live gate check in this codebase hands `merge_queue`'s gate functions.
|
|
3066
3067
|
|
|
3068
|
+
#3375: *issue_liveness_fetcher* is the SAME opt-in
|
|
3069
|
+
``(repo_name, issue_number) -> (issue_closed, branch_merged)`` contract
|
|
3070
|
+
`coord.dispatch_liveness.check_dispatch_liveness` already gates
|
|
3071
|
+
`coord.dispatch.dispatch()` with (#3376) — but this stage never went
|
|
3072
|
+
through that call path. `dispatch_smoke`/`_dispatch_smoke_legs` POST
|
|
3073
|
+
straight to a machine's `/assign` over `httpx`, so #3376's dispatch-time
|
|
3074
|
+
gate never saw a Test-stage dispatch at all, and the five-smoke-agents
|
|
3075
|
+
incident that motivated both issues could still reproduce after #3376
|
|
3076
|
+
landed. Checked once per eligible row here, BEFORE any candidate is
|
|
3077
|
+
walked or any machine chosen (`_dispatch_smoke_legs` needs no machine
|
|
3078
|
+
name to know the issue is closed or the branch already merged) — a hit
|
|
3079
|
+
records a `skipped` verdict (there is nothing left to gate) via
|
|
3080
|
+
`record_test_verdict` and an audit row via
|
|
3081
|
+
`coord.dispatch_liveness.record_dispatch_refusal`, and the row is left
|
|
3082
|
+
alone rather than walking the candidate list for nothing. Default
|
|
3083
|
+
``None`` refuses nothing — identical to every pre-#3375 caller.
|
|
3084
|
+
|
|
3067
3085
|
A confirmed-stale verdict is **cleared** (``record_test_verdict(...,
|
|
3068
3086
|
test_state=None)``, mirrored in-memory on ``completed.test_state``)
|
|
3069
3087
|
*before* the re-dispatch, not left in place — so the row reads
|
|
@@ -3264,6 +3282,59 @@ def dispatch_pending_smoke(
|
|
|
3264
3282
|
)
|
|
3265
3283
|
continue
|
|
3266
3284
|
|
|
3285
|
+
# #3375: refuse to dispatch a Test stage for a row whose issue has
|
|
3286
|
+
# already closed or whose branch has already merged — the liveness
|
|
3287
|
+
# precondition #3376 built for `coord.dispatch.dispatch()` but never
|
|
3288
|
+
# reached this stage, because smoke dispatch never calls it (see the
|
|
3289
|
+
# docstring above). Checked here, right before candidate walking,
|
|
3290
|
+
# because it needs no machine selection to answer. A hit records a
|
|
3291
|
+
# `skipped` verdict (there is nothing left for a Test verdict to
|
|
3292
|
+
# gate) instead of `None`/leaving it unset — leaving it unset would
|
|
3293
|
+
# re-enter this exact row on the very next tick and re-probe GitHub
|
|
3294
|
+
# forever for an answer that cannot change back.
|
|
3295
|
+
if issue_liveness_fetcher is not None:
|
|
3296
|
+
from coord.dispatch_liveness import ( # noqa: PLC0415
|
|
3297
|
+
check_dispatch_liveness,
|
|
3298
|
+
record_dispatch_refusal,
|
|
3299
|
+
)
|
|
3300
|
+
|
|
3301
|
+
issue_closed, branch_merged = issue_liveness_fetcher(
|
|
3302
|
+
completed.repo_name, completed.issue_number
|
|
3303
|
+
)
|
|
3304
|
+
refusal = check_dispatch_liveness(
|
|
3305
|
+
repo_name=completed.repo_name,
|
|
3306
|
+
issue_number=completed.issue_number,
|
|
3307
|
+
machine_name="(smoke: no machine selected yet)",
|
|
3308
|
+
issue_closed=issue_closed,
|
|
3309
|
+
branch_merged=branch_merged,
|
|
3310
|
+
)
|
|
3311
|
+
if refusal is not None:
|
|
3312
|
+
if completed.assignment_id is not None:
|
|
3313
|
+
from coord.state import record_test_verdict # noqa: PLC0415
|
|
3314
|
+
|
|
3315
|
+
record_test_verdict(
|
|
3316
|
+
assignment_id=completed.assignment_id,
|
|
3317
|
+
test_state="skipped",
|
|
3318
|
+
test_reason=(
|
|
3319
|
+
f"Test stage skipped — {refusal.reason} (#3375)"
|
|
3320
|
+
),
|
|
3321
|
+
)
|
|
3322
|
+
completed.test_state = "skipped"
|
|
3323
|
+
record_dispatch_refusal(
|
|
3324
|
+
refusal,
|
|
3325
|
+
repo_name=completed.repo_name,
|
|
3326
|
+
issue_number=completed.issue_number,
|
|
3327
|
+
machine_name="(smoke: no machine selected yet)",
|
|
3328
|
+
assignment_type="smoke",
|
|
3329
|
+
)
|
|
3330
|
+
logger.info(
|
|
3331
|
+
"dispatch_pending_smoke: refused to dispatch for %s#%s "
|
|
3332
|
+
"row %s — %s",
|
|
3333
|
+
completed.repo_name, completed.issue_number,
|
|
3334
|
+
completed.assignment_id, refusal.reason,
|
|
3335
|
+
)
|
|
3336
|
+
continue
|
|
3337
|
+
|
|
3267
3338
|
# #3182: the full-list implementation — a capability fan-out
|
|
3268
3339
|
# dispatches more than one leg per completion, so this loop cannot
|
|
3269
3340
|
# go through the compat-wrapping `dispatch_smoke` (which only ever
|