code-coordinator 0.5.758__tar.gz → 0.5.759__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.758 → code_coordinator-0.5.759}/PKG-INFO +1 -1
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/code_coordinator.egg-info/PKG-INFO +1 -1
- code_coordinator-0.5.759/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/drive_queue.py +33 -15
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/drive_queue.py +237 -31
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/wedged_drive_queue.py +22 -13
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/collect.py +98 -3
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_drive_queue.py +129 -1
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_queue.py +176 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notifier_collect.py +146 -0
- code_coordinator-0.5.758/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/.gitignore +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/CLAUDE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/GOAL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/LICENSE +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/MANIFEST.in +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/README.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/agent.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/app_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/app_drive_daemon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/backup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/block_log.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/board_doctor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/board_doctor_followthrough.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/board_doctor_permissions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/board_doctor_policy.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/board_service.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/brain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/briefing_lessons.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/claim.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/client.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/codegen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/app_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/comments.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dao.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/db.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-board-doctor.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-board-doctor.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/deps.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/entry_truth.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/events.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/filelock.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/freshness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/gates.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/goal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/gui_lane_preflight.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/sustained_cpu.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/context.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/models.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/render.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/units.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/hooks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/interactive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/key_spec.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/models.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/native_fs_wait.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/native_pixels.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/network.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/nightly_runner.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/nightly_smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/nightly_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/nightly_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/notify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/openapi.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/parentage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/plans.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/preflight_size.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/prereview_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/progress.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/release_window.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/reports.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/review.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/self_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/shell_exec_wrap.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/split_work.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/sql.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/test_author.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/test_report.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/upstream_gaps.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/usage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-board-doctor.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-board-doctor.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/install-agent.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/pyproject.toml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/comment_cruft.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/setup.cfg +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/backends.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/conftest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_graceful_shutdown_3649.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_graph_refresh.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_app_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_doctor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_doctor_followthrough.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_doctor_permissions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_doctor_policy.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_nightly_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_briefing_lessons.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_drive_queue_investigate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_drive_queue_stranded_prereq.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_gates_next_action.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_inject_board_less.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_issue_close_wrong_repo.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_smoke_nightly.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_smoke_nightly_sweep.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_nightly.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_client.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_comment_cruft.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_config_prereview_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_test_runner_venv_setup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_db.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_entry_truth.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_events.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_sustained_cpu.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_init.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_key_spec.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_merge_verification.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_models.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_models_pinned_1650.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_native_fs_wait.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_native_pixels.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_network.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_nightly_runner.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_nightly_smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_nightly_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_nightly_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_no_eligible_host_3600.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_pause_store_guard_recursion_3789.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_plain_runner_smoke_3673.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_preflight_size.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_prereview_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_queue_diagnose.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_review.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_session.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_smoke_plain_runner_3673.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_split.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_upstream_gaps.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.759}/tests/write_parity.py +0 -0
|
@@ -93,6 +93,8 @@ from coord.drive_queue import (
|
|
|
93
93
|
find_cycle,
|
|
94
94
|
fired_holds,
|
|
95
95
|
flag_shadows_config_warning,
|
|
96
|
+
format_coarse_duration,
|
|
97
|
+
is_benign_queue_alert_command,
|
|
96
98
|
is_dispatch_failure_reason,
|
|
97
99
|
is_fix_round_ceiling_blocked,
|
|
98
100
|
is_merge_gate_block_reason,
|
|
@@ -2069,15 +2071,12 @@ def _reason_age_suffix(entry: QueueEntry, now: float) -> str:
|
|
|
2069
2071
|
return f" ({_age_str(max(0.0, now - entry.reason_at))} ago)"
|
|
2070
2072
|
|
|
2071
2073
|
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
if delta_seconds < 86400:
|
|
2079
|
-
return f"{int(delta_seconds // 3600)}h"
|
|
2080
|
-
return f"{int(delta_seconds // 86400)}d"
|
|
2074
|
+
# #3983: `coord.drive_queue.format_coarse_duration` — imported under this
|
|
2075
|
+
# module's own pre-existing name so every call site below (and the
|
|
2076
|
+
# `describe_unreachable_wait`-driven alert text) renders "how long has this
|
|
2077
|
+
# held" with the identical single-unit shape, never a second formatter that
|
|
2078
|
+
# could drift from it.
|
|
2079
|
+
_age_str = format_coarse_duration
|
|
2081
2080
|
|
|
2082
2081
|
|
|
2083
2082
|
def _hold_lines(entry: QueueEntry) -> list[str]:
|
|
@@ -2566,7 +2565,7 @@ def _unreachable_wait_alert_dict(rows: list[Mapping[str, Any]]) -> dict | None:
|
|
|
2566
2565
|
waits = detect_unreachable_waits(entries_from_rows(rows))
|
|
2567
2566
|
if not waits:
|
|
2568
2567
|
return None
|
|
2569
|
-
synthetic = unreachable_wait_alert(waits)
|
|
2568
|
+
synthetic = unreachable_wait_alert(waits, now=time.time())
|
|
2570
2569
|
return {
|
|
2571
2570
|
"reason": synthetic.reason,
|
|
2572
2571
|
"gate_readings": " | ".join(synthetic.details),
|
|
@@ -2583,13 +2582,32 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
|
|
|
2583
2582
|
|
|
2584
2583
|
rows = list_drive_queue()
|
|
2585
2584
|
counts = _counts(rows)
|
|
2586
|
-
# #2944: a tick-raised alert (a HELD gate,
|
|
2585
|
+
# #2944: a tick-raised alert (a HELD gate, a real BLOCKED-entry remedy)
|
|
2587
2586
|
# takes priority when one exists — it is fresher and, on a busy queue,
|
|
2588
2587
|
# `_unreachable_wait_alert_dict` would silently win-and-hide it every
|
|
2589
|
-
# time a real, actionable alert IS present.
|
|
2590
|
-
#
|
|
2591
|
-
#
|
|
2592
|
-
|
|
2588
|
+
# time a real, actionable alert IS present.
|
|
2589
|
+
#
|
|
2590
|
+
# #3983: EXCEPT the one tick-raised shape that is itself a sentinel for
|
|
2591
|
+
# "nothing is actually broken" — `QUEUE_ALERT_NO_REMEDY_COMMAND` (step
|
|
2592
|
+
# 4's "nothing eligible to launch" write when every stalled entry is a
|
|
2593
|
+
# benign deferral, never an actual block). The quadraui#2341 incident: a
|
|
2594
|
+
# root parked `needs_decomposition` with 13 `waiting` dependents chained
|
|
2595
|
+
# on it via `after=` never reaches `blocked` at all — `_resolve_prereqs`
|
|
2596
|
+
# treats a `parked` pre-req as an ordinary unsatisfied deferral, not the
|
|
2597
|
+
# unsatisfiable-and-escalate shape it gives a `blocked`/`failed` one — so
|
|
2598
|
+
# EVERY tick re-wrote this exact no-remedy sentinel over the root's own
|
|
2599
|
+
# #2944/#2978 finding, and `status` never got a chance to name it. Same
|
|
2600
|
+
# benign-sentinel check `coord.notifier.collect.halted_drives` already
|
|
2601
|
+
# uses to keep this shape out of the pager — one question ("is this
|
|
2602
|
+
# tick-raised alert itself the thing, or just noise?"), one answer,
|
|
2603
|
+
# shared by both callers.
|
|
2604
|
+
tick_alert = _queue_alert()
|
|
2605
|
+
if tick_alert is not None and not is_benign_queue_alert_command(
|
|
2606
|
+
tick_alert.get("proposed_command")
|
|
2607
|
+
):
|
|
2608
|
+
alert = tick_alert
|
|
2609
|
+
else:
|
|
2610
|
+
alert = _unreachable_wait_alert_dict(rows) or tick_alert
|
|
2593
2611
|
# #3413: `alert["created_at"]` (present only for a tick-raised record —
|
|
2594
2612
|
# `_unreachable_wait_alert_dict` is computed fresh on every call and
|
|
2595
2613
|
# carries no timestamp of its own) now survives an unbroken same-reason
|
|
@@ -1551,6 +1551,20 @@ QUEUE_ALERT_STAGE = "drive-queue"
|
|
|
1551
1551
|
#: change — `coord drive-queue status` still reads the record unchanged.
|
|
1552
1552
|
QUEUE_ALERT_NO_REMEDY_COMMAND = "coord drive-queue list"
|
|
1553
1553
|
|
|
1554
|
+
|
|
1555
|
+
def is_benign_queue_alert_command(command: object) -> bool:
|
|
1556
|
+
"""Is *command* the :data:`QUEUE_ALERT_NO_REMEDY_COMMAND` sentinel?
|
|
1557
|
+
|
|
1558
|
+
One normalization (`str(...).strip()`), shared by `coord drive-queue
|
|
1559
|
+
status` (`coord.commands.drive_queue._queue_alert`'s caller) and the
|
|
1560
|
+
notifier (`coord.notifier.collect.halted_drives`) — before #3983 each
|
|
1561
|
+
wrote its own comparison (one on the raw dict value, the other via
|
|
1562
|
+
`str(...).strip()` plus its own repo/issue check), which happened to
|
|
1563
|
+
agree only because neither had yet drifted; this is the one answer both
|
|
1564
|
+
now ask the identical question of (#2096).
|
|
1565
|
+
"""
|
|
1566
|
+
return str(command or "").strip() == QUEUE_ALERT_NO_REMEDY_COMMAND
|
|
1567
|
+
|
|
1554
1568
|
#: #3413: a DISPLAY hint only — production's `coord-drive-queue.timer` fires
|
|
1555
1569
|
#: every 3 minutes (`OnUnitActiveSec=3min`, `deploy/coord-drive-queue.timer`),
|
|
1556
1570
|
#: not a value this module reads from the deployed unit (there is no seam to
|
|
@@ -4196,6 +4210,16 @@ class UnreachableWait:
|
|
|
4196
4210
|
is accurate even though those dependents themselves never appear in the
|
|
4197
4211
|
result (see the predicate's own docstring for why). `0` for an entry
|
|
4198
4212
|
nothing is chained behind.
|
|
4213
|
+
|
|
4214
|
+
`cause` (#3983) is :func:`classify_unreachable_wait_cause`'s verdict —
|
|
4215
|
+
one of :data:`UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION`/
|
|
4216
|
+
`_PREMISE_REFUSAL`/`_UPSTREAM_GAP_PARK` for a terminal park, or
|
|
4217
|
+
`_DISPATCH_FAILURE`/`_NEVER_DISPATCHED` for the two shapes
|
|
4218
|
+
:func:`is_unreachable_wait_shape` itself distinguishes. `reason_at` is
|
|
4219
|
+
`entry.reason_at` carried straight through — the wall-clock stamp of
|
|
4220
|
+
when `last_reason` (hence this wait) was written, so a renderer can
|
|
4221
|
+
show how long the row has sat this way instead of a bare, undated
|
|
4222
|
+
reason (#2133's rule, applied here).
|
|
4199
4223
|
"""
|
|
4200
4224
|
|
|
4201
4225
|
key: str
|
|
@@ -4203,6 +4227,8 @@ class UnreachableWait:
|
|
|
4203
4227
|
deferrals: int
|
|
4204
4228
|
last_reason: str
|
|
4205
4229
|
dependents: int = 0
|
|
4230
|
+
cause: str = ""
|
|
4231
|
+
reason_at: float | None = None
|
|
4206
4232
|
|
|
4207
4233
|
|
|
4208
4234
|
def is_unreachable_wait_shape(entry: QueueEntry) -> bool:
|
|
@@ -4273,6 +4299,135 @@ def is_unreachable_wait_shape(entry: QueueEntry) -> bool:
|
|
|
4273
4299
|
return entry.state == STATE_BLOCKED and _is_dispatch_failure_reason(entry.last_reason)
|
|
4274
4300
|
|
|
4275
4301
|
|
|
4302
|
+
# #3983: the cause label `classify_unreachable_wait_cause` assigns a row
|
|
4303
|
+
# matching `is_unreachable_wait_shape`. The three terminal-park values are
|
|
4304
|
+
# the SAME strings `coord.queue_diagnose` names
|
|
4305
|
+
# `CAUSE_NEEDS_DECOMPOSITION`/`CAUSE_PREMISE_REFUSAL`/`CAUSE_UPSTREAM_GAP_PARK`
|
|
4306
|
+
# — deliberately not imported from there: `coord.queue_diagnose` imports
|
|
4307
|
+
# `QueueEntry`/`is_unreachable_wait_shape` FROM this module, so importing its
|
|
4308
|
+
# constants back here would cycle. Keeping the literal text identical is
|
|
4309
|
+
# what lets a reader compare `coord drive-queue status`'s alert and `coord
|
|
4310
|
+
# drive-queue diagnose`'s verdict for the same row without translating
|
|
4311
|
+
# between two vocabularies for the same finding (#2096).
|
|
4312
|
+
UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION = "needs-decomposition"
|
|
4313
|
+
UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL = "premise-refusal"
|
|
4314
|
+
UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK = "upstream-gap-park"
|
|
4315
|
+
#: `attempts > 0`, exhausted the retry budget with no #2273 dispatch-layer
|
|
4316
|
+
#: assignment ever created — the second `is_unreachable_wait_shape` branch.
|
|
4317
|
+
UNREACHABLE_WAIT_CAUSE_DISPATCH_FAILURE = "dispatch-failure"
|
|
4318
|
+
#: `attempts == 0`, no terminal-park marker — the original #2944 shape:
|
|
4319
|
+
#: nothing has ever tried to dispatch this row at all.
|
|
4320
|
+
UNREACHABLE_WAIT_CAUSE_NEVER_DISPATCHED = "never-dispatched"
|
|
4321
|
+
|
|
4322
|
+
#: The three causes a worker/park-writer already asserted are terminal —
|
|
4323
|
+
#: "no fix-it leg or relaunch can resolve this" is the row's OWN last_reason
|
|
4324
|
+
#: text, not a guess this module is making. See
|
|
4325
|
+
#: :func:`unreachable_wait_remedy_command` for why that rules out the
|
|
4326
|
+
#: blanket `remove && add` requeue for exactly these three.
|
|
4327
|
+
_UNREACHABLE_WAIT_TERMINAL_PARK_CAUSES = frozenset(
|
|
4328
|
+
{
|
|
4329
|
+
UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION,
|
|
4330
|
+
UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL,
|
|
4331
|
+
UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK,
|
|
4332
|
+
}
|
|
4333
|
+
)
|
|
4334
|
+
|
|
4335
|
+
_UNREACHABLE_WAIT_CAUSE_LABEL: dict[str, str] = {
|
|
4336
|
+
UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION: "needs-decomposition park (#3931)",
|
|
4337
|
+
UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL: "premise-refusal park (#3164)",
|
|
4338
|
+
UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK: "upstream-gap park (#3977)",
|
|
4339
|
+
UNREACHABLE_WAIT_CAUSE_DISPATCH_FAILURE: "exhausted dispatch-layer death (#2273)",
|
|
4340
|
+
UNREACHABLE_WAIT_CAUSE_NEVER_DISPATCHED: "never dispatched",
|
|
4341
|
+
}
|
|
4342
|
+
|
|
4343
|
+
#: The manual next-step for a cause no blind command can fix — embedded
|
|
4344
|
+
#: straight into :func:`describe_unreachable_wait` so the reason text stays
|
|
4345
|
+
#: self-contained even where :func:`unreachable_wait_remedy_command` can only
|
|
4346
|
+
#: offer a read-only fallback (#3983).
|
|
4347
|
+
_UNREACHABLE_WAIT_CAUSE_MANUAL_NOTE: dict[str, str] = {
|
|
4348
|
+
UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION: (
|
|
4349
|
+
"not fixable by any fix-it leg or relaunch — decompose the issue "
|
|
4350
|
+
"into the proposed sub-issues and clear the row by hand"
|
|
4351
|
+
),
|
|
4352
|
+
UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL: (
|
|
4353
|
+
"not fixable by a requeue alone — run `coord drive-queue "
|
|
4354
|
+
"clear-refusal` once the missing prerequisite is confirmed, THEN "
|
|
4355
|
+
"`coord drive-queue remove` + `add`"
|
|
4356
|
+
),
|
|
4357
|
+
UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK: (
|
|
4358
|
+
"not fixable by any fix-it leg or relaunch — clear the row by hand "
|
|
4359
|
+
"once the release lands or the gap is confirmed"
|
|
4360
|
+
),
|
|
4361
|
+
}
|
|
4362
|
+
|
|
4363
|
+
|
|
4364
|
+
def classify_unreachable_wait_cause(entry: QueueEntry) -> str:
|
|
4365
|
+
"""Which `is_unreachable_wait_shape` branch explains *entry*'s wedge.
|
|
4366
|
+
|
|
4367
|
+
Read straight off `entry.last_reason` via the same marker predicates
|
|
4368
|
+
`coord.drive_queue`'s own parked pre-pass and
|
|
4369
|
+
`coord.queue_diagnose._rule_terminal_park` already trust for this text
|
|
4370
|
+
— never a live probe, so this is exactly as cheap as the shape check
|
|
4371
|
+
itself (#2096: one question, one answer, asked the same way everywhere).
|
|
4372
|
+
Callers are expected to gate on :func:`is_unreachable_wait_shape` first;
|
|
4373
|
+
called on a row that fails that shape, this still returns a value
|
|
4374
|
+
rather than raising (the two dispatch-shaped labels degrade safely for
|
|
4375
|
+
an unmatched row — see :func:`unreachable_wait_remedy_command`, which
|
|
4376
|
+
treats an unrecognised cause the same as "never dispatched").
|
|
4377
|
+
"""
|
|
4378
|
+
reason = entry.last_reason
|
|
4379
|
+
if is_premise_refusal_reason(reason):
|
|
4380
|
+
return UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL
|
|
4381
|
+
if is_needs_decomposition_reason(reason):
|
|
4382
|
+
return UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION
|
|
4383
|
+
if is_upstream_gap_park_reason(reason):
|
|
4384
|
+
return UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK
|
|
4385
|
+
if entry.attempts and _is_dispatch_failure_reason(reason):
|
|
4386
|
+
return UNREACHABLE_WAIT_CAUSE_DISPATCH_FAILURE
|
|
4387
|
+
return UNREACHABLE_WAIT_CAUSE_NEVER_DISPATCHED
|
|
4388
|
+
|
|
4389
|
+
|
|
4390
|
+
def unreachable_wait_remedy_command(w: UnreachableWait) -> str:
|
|
4391
|
+
"""The one-line fix for *w*, picked by `.cause` (#3983) — never the
|
|
4392
|
+
blanket `coord drive-queue remove && add` requeue for a cause the row's
|
|
4393
|
+
OWN last_reason already asserts no relaunch can resolve.
|
|
4394
|
+
|
|
4395
|
+
Mirrors :func:`merge_gate_remedy_command`'s #3016 rule for the same
|
|
4396
|
+
reason: a wrong "run this" is worse than no recommendation, so a cause
|
|
4397
|
+
with no blind-safe command falls back to the identical read-only
|
|
4398
|
+
inspect pattern (`coord drive-queue list`, scoped to the entry's repo)
|
|
4399
|
+
rather than ever proposing `remove`+`add` for a needs-decomposition,
|
|
4400
|
+
premise-refusal or upstream-gap park — relaunching one of those just
|
|
4401
|
+
re-runs the drive straight back into the identical park (the #3922
|
|
4402
|
+
needs-decomposition incident this guards against).
|
|
4403
|
+
"""
|
|
4404
|
+
parsed = parse_key(w.key)
|
|
4405
|
+
repo, issue = parsed if parsed is not None else ("", 0)
|
|
4406
|
+
if w.cause in _UNREACHABLE_WAIT_TERMINAL_PARK_CAUSES:
|
|
4407
|
+
return f"coord drive-queue list --repo {repo}"
|
|
4408
|
+
return (
|
|
4409
|
+
f"coord drive-queue remove {repo} {issue} && "
|
|
4410
|
+
f"coord drive-queue add {repo} {issue}"
|
|
4411
|
+
)
|
|
4412
|
+
|
|
4413
|
+
|
|
4414
|
+
def format_coarse_duration(delta_seconds: float) -> str:
|
|
4415
|
+
"""``42s`` / ``3h`` / ``5d`` — coarse, single-unit (#2133's ask).
|
|
4416
|
+
|
|
4417
|
+
Shared by :func:`describe_unreachable_wait` and
|
|
4418
|
+
`coord.commands.drive_queue`'s own age renderings (imported from here
|
|
4419
|
+
rather than re-implemented) so "how long has this held" always reads
|
|
4420
|
+
the same shape everywhere it is shown.
|
|
4421
|
+
"""
|
|
4422
|
+
if delta_seconds < 60:
|
|
4423
|
+
return f"{int(delta_seconds)}s"
|
|
4424
|
+
if delta_seconds < 3600:
|
|
4425
|
+
return f"{int(delta_seconds // 60)}m"
|
|
4426
|
+
if delta_seconds < 86400:
|
|
4427
|
+
return f"{int(delta_seconds // 3600)}h"
|
|
4428
|
+
return f"{int(delta_seconds // 86400)}d"
|
|
4429
|
+
|
|
4430
|
+
|
|
4276
4431
|
def is_unreachable_wait(
|
|
4277
4432
|
entry: QueueEntry,
|
|
4278
4433
|
*,
|
|
@@ -4327,21 +4482,74 @@ def detect_unreachable_waits(
|
|
|
4327
4482
|
deferrals=e.deferrals,
|
|
4328
4483
|
last_reason=e.last_reason,
|
|
4329
4484
|
dependents=dependents_of.get(e.key, 0),
|
|
4485
|
+
cause=classify_unreachable_wait_cause(e),
|
|
4486
|
+
reason_at=e.reason_at,
|
|
4330
4487
|
)
|
|
4331
4488
|
)
|
|
4332
4489
|
return waits
|
|
4333
4490
|
|
|
4334
4491
|
|
|
4335
|
-
def
|
|
4492
|
+
def describe_unreachable_wait(w: UnreachableWait, *, now: float | None = None) -> str:
|
|
4493
|
+
"""Render one :class:`UnreachableWait` — the entry, its cause (#3983),
|
|
4494
|
+
how long it has sat this way, and (#2978) its dependent count when
|
|
4495
|
+
non-zero, naming WHY those dependents need no remedy of their own (they
|
|
4496
|
+
self-heal on #2756 the moment the root clears, so a reader must not
|
|
4497
|
+
read this as "fix these too").
|
|
4498
|
+
|
|
4499
|
+
*now* is the caller's wall clock: omitted (the default), the age clause
|
|
4500
|
+
is left out rather than guessed — the same degrade `_reason_age_suffix`
|
|
4501
|
+
uses for a row with no `reason_at` at all. Every live caller has a
|
|
4502
|
+
clock available (`time.time()` for the CLI/notifier, `ctx.now` for the
|
|
4503
|
+
health probe) and is expected to pass it; only a clockless test exercises
|
|
4504
|
+
the bare form.
|
|
4505
|
+
|
|
4506
|
+
One rendering, shared by :func:`unreachable_wait_alert` (the `coord
|
|
4507
|
+
drive-queue status` `alert:` line), `coord doctor`'s WARN sample
|
|
4508
|
+
(:mod:`coord.health.checks.wedged_drive_queue`) and (#3983)
|
|
4509
|
+
:mod:`coord.notifier.collect`'s own per-root ``HaltedDrive`` reason —
|
|
4510
|
+
so the CLI, the health probe and the pager phrase the identical finding
|
|
4511
|
+
identically rather than drifting apart (#2096).
|
|
4512
|
+
"""
|
|
4513
|
+
age = ""
|
|
4514
|
+
if now is not None and w.reason_at is not None:
|
|
4515
|
+
age = f", stuck {format_coarse_duration(max(0.0, now - w.reason_at))}"
|
|
4516
|
+
cause_label = _UNREACHABLE_WAIT_CAUSE_LABEL.get(w.cause, w.cause or "unknown cause")
|
|
4517
|
+
base = f"{w.key} ({w.state}, {cause_label}, {w.deferrals} deferrals{age})"
|
|
4518
|
+
notes: list[str] = []
|
|
4519
|
+
manual_note = _UNREACHABLE_WAIT_CAUSE_MANUAL_NOTE.get(w.cause)
|
|
4520
|
+
if manual_note:
|
|
4521
|
+
notes.append(manual_note)
|
|
4522
|
+
if w.dependents:
|
|
4523
|
+
plural = "y" if w.dependents == 1 else "ies"
|
|
4524
|
+
notes.append(
|
|
4525
|
+
f"{w.dependents} dependent entr{plural} chained behind it will "
|
|
4526
|
+
"self-heal automatically once this clears (#2756), no remedy "
|
|
4527
|
+
"needed on them"
|
|
4528
|
+
)
|
|
4529
|
+
if notes:
|
|
4530
|
+
base += " — " + "; ".join(notes)
|
|
4531
|
+
return base
|
|
4532
|
+
|
|
4533
|
+
|
|
4534
|
+
def unreachable_wait_alert(
|
|
4535
|
+
waits: Sequence[UnreachableWait], *, now: float | None = None
|
|
4536
|
+
) -> QueueAlert:
|
|
4336
4537
|
"""The queue-level record #2944's predicate raises, in :func:`_hold_alert`'s
|
|
4337
4538
|
shape — a message naming the entry (or entries), the evidence that
|
|
4338
|
-
qualified it, and the
|
|
4539
|
+
qualified it, and the remedy that actually clears it.
|
|
4540
|
+
|
|
4541
|
+
#3983: the remedy is picked PER ENTRY by :func:`unreachable_wait_remedy_command`
|
|
4542
|
+
— never the blanket ``remove`` + ``add`` for a needs-decomposition/
|
|
4543
|
+
premise-refusal/upstream-gap park, each of which the row's own
|
|
4544
|
+
last_reason already asserts no relaunch can resolve (see that
|
|
4545
|
+
function's docstring). The top-level ``command`` field mirrors the
|
|
4546
|
+
single entry's remedy when there is exactly one; with several entries
|
|
4547
|
+
of possibly different causes there is no one command that is safe for
|
|
4548
|
+
all of them, so it falls back to the same read-only ``coord
|
|
4549
|
+
drive-queue list`` #3016's ``merge_gate_remedy_command`` falls back to
|
|
4550
|
+
— the per-entry remedy is still named in ``details`` and inline in
|
|
4551
|
+
``reason`` via :func:`describe_unreachable_wait`.
|
|
4339
4552
|
|
|
4340
|
-
``add`` alone does not clear ``blocked`` (the queue list already
|
|
4341
|
-
documents this as a footgun elsewhere) — only ``remove`` then ``add``
|
|
4342
|
-
does, so that is the command surfaced here rather than the generic
|
|
4343
|
-
``coord drive-queue list`` other alerts fall back on; naming the wrong
|
|
4344
|
-
remedy on a state this non-obvious defeats the point of alerting at all.
|
|
4345
4553
|
Named INLINE in ``reason`` (not only in ``command``, which
|
|
4346
4554
|
``drive-queue status``'s plain-text rendering never echoes — only its
|
|
4347
4555
|
``gate_readings``/``details`` lines are printed) so the remedy is visible
|
|
@@ -4358,42 +4566,40 @@ def unreachable_wait_alert(waits: Sequence[UnreachableWait]) -> QueueAlert:
|
|
|
4358
4566
|
that were never named — but easy to mis-generalize to "the dependents
|
|
4359
4567
|
too" by an operator who does not already know #2756 self-heals them.
|
|
4360
4568
|
"""
|
|
4361
|
-
|
|
4362
|
-
base = f"{w.key} ({w.state}, {w.deferrals} deferrals)"
|
|
4363
|
-
if w.dependents:
|
|
4364
|
-
plural = "ies" if w.dependents != 1 else "y"
|
|
4365
|
-
base += (
|
|
4366
|
-
f" — {w.dependents} dependent entr{plural} chained behind it "
|
|
4367
|
-
"will self-heal automatically once this clears (#2756), no "
|
|
4368
|
-
"remedy needed on them"
|
|
4369
|
-
)
|
|
4370
|
-
return base
|
|
4371
|
-
|
|
4372
|
-
names = ", ".join(_name(w) for w in waits[:5])
|
|
4569
|
+
names = ", ".join(describe_unreachable_wait(w, now=now) for w in waits[:5])
|
|
4373
4570
|
more = ", ..." if len(waits) > 5 else ""
|
|
4374
4571
|
plural = len(waits) != 1
|
|
4572
|
+
if len(waits) == 1:
|
|
4573
|
+
command = unreachable_wait_remedy_command(waits[0])
|
|
4574
|
+
elif waits and all(
|
|
4575
|
+
w.cause not in _UNREACHABLE_WAIT_TERMINAL_PARK_CAUSES for w in waits
|
|
4576
|
+
):
|
|
4577
|
+
command = (
|
|
4578
|
+
"coord drive-queue remove <repo> <issue> && "
|
|
4579
|
+
"coord drive-queue add <repo> <issue> — for each ROOT entry "
|
|
4580
|
+
"named above; any dependents chained behind it self-heal on "
|
|
4581
|
+
"their own (#2756)"
|
|
4582
|
+
)
|
|
4583
|
+
else:
|
|
4584
|
+
command = "coord drive-queue list # remedy differs per entry — see above"
|
|
4375
4585
|
return QueueAlert(
|
|
4376
4586
|
reason=(
|
|
4377
4587
|
f"{len(waits)} queue entr{'ies' if plural else 'y'} stuck in a "
|
|
4378
4588
|
"guaranteed-false wait — blocked/parked with no branch/PR/"
|
|
4379
4589
|
"merge-queue row any sweep could ever act on (never dispatched, "
|
|
4380
4590
|
"or every dispatch attempt died before creating an assignment); "
|
|
4381
|
-
f"no sweep can ever clear this on its own: {names}{more}. Fix
|
|
4382
|
-
"
|
|
4383
|
-
"
|
|
4384
|
-
"
|
|
4591
|
+
f"no sweep can ever clear this on its own: {names}{more}. Fix "
|
|
4592
|
+
"is named per entry above — a needs-decomposition/"
|
|
4593
|
+
"premise-refusal/upstream-gap park is NEVER cleared by `remove`"
|
|
4594
|
+
"+`add`, only an ordinary never-dispatched/dispatch-failure root is."
|
|
4385
4595
|
),
|
|
4386
4596
|
details=tuple(
|
|
4387
|
-
f"{w.key}: {w.state}, {w.deferrals} deferrals, "
|
|
4388
|
-
f"dependents={w.dependents}, last_reason={w.last_reason!r}"
|
|
4597
|
+
f"{w.key}: {w.state}, cause={w.cause}, {w.deferrals} deferrals, "
|
|
4598
|
+
f"dependents={w.dependents}, last_reason={w.last_reason!r}, "
|
|
4599
|
+
f"fix={unreachable_wait_remedy_command(w)}"
|
|
4389
4600
|
for w in waits
|
|
4390
4601
|
),
|
|
4391
|
-
command=
|
|
4392
|
-
"coord drive-queue remove <repo> <issue> && "
|
|
4393
|
-
"coord drive-queue add <repo> <issue> — for each ROOT entry "
|
|
4394
|
-
"named above; any dependents chained behind it self-heal on "
|
|
4395
|
-
"their own (#2756)"
|
|
4396
|
-
),
|
|
4602
|
+
command=command,
|
|
4397
4603
|
)
|
|
4398
4604
|
|
|
4399
4605
|
|
{code_coordinator-0.5.758 → code_coordinator-0.5.759}/coord/health/checks/wedged_drive_queue.py
RENAMED
|
@@ -33,9 +33,13 @@ that produced the #2900/#2907 incident) and #2230 (the sweep's origin): both
|
|
|
33
33
|
are about *why* a row gets wedged this way; this check is about the row
|
|
34
34
|
being wedged *at all*, whatever sweep — present or future — produced it.
|
|
35
35
|
|
|
36
|
-
WARN, not CRIT: the
|
|
37
|
-
remove`` + ``add``) once
|
|
38
|
-
know
|
|
36
|
+
WARN, not CRIT: for the never-dispatched/dispatch-failure shapes the fix
|
|
37
|
+
costs an operator ~10 seconds (``coord drive-queue remove`` + ``add``) once
|
|
38
|
+
they know; for the three terminal-park causes (#3983 —
|
|
39
|
+
needs-decomposition/premise-refusal/upstream-gap-park) it costs a human
|
|
40
|
+
decision instead (decompose the issue, confirm the prerequisite, or wait for
|
|
41
|
+
the release), never that requeue — either way this check exists to make
|
|
42
|
+
sure an operator knows, it is not itself an outage.
|
|
39
43
|
|
|
40
44
|
``cost=COST_NETWORK``, not ``COST_CHEAP``: ``coord.state.list_drive_queue``
|
|
41
45
|
routes to the daemon over HTTP whenever ``board_service`` is set, which is
|
|
@@ -76,10 +80,11 @@ from coord.health.registry import COST_NETWORK, check
|
|
|
76
80
|
),
|
|
77
81
|
)
|
|
78
82
|
def probe_wedged_drive_queue(ctx: HealthContext) -> CheckResult:
|
|
79
|
-
del ctx # unused: this check reads local queue state directly, not config
|
|
80
83
|
from coord.drive_queue import ( # noqa: PLC0415
|
|
84
|
+
describe_unreachable_wait,
|
|
81
85
|
detect_unreachable_waits,
|
|
82
86
|
entries_from_rows,
|
|
87
|
+
unreachable_wait_remedy_command,
|
|
83
88
|
)
|
|
84
89
|
from coord.state import list_drive_queue # noqa: PLC0415
|
|
85
90
|
|
|
@@ -103,11 +108,12 @@ def probe_wedged_drive_queue(ctx: HealthContext) -> CheckResult:
|
|
|
103
108
|
headroom="0 wedged drive-queue entries",
|
|
104
109
|
)
|
|
105
110
|
|
|
111
|
+
# #3983: `describe_unreachable_wait` — the SAME rendering `coord
|
|
112
|
+
# drive-queue status`'s `alert:` line and the notifier's pager entry
|
|
113
|
+
# use — rather than this probe building its own text for the identical
|
|
114
|
+
# finding (#2096: one question, one answer, three surfaces).
|
|
106
115
|
sample = ", ".join(
|
|
107
|
-
|
|
108
|
-
+ (f", {w.dependents} dependents self-heal (#2756)" if w.dependents else "")
|
|
109
|
-
+ ")"
|
|
110
|
-
for w in waits[:5]
|
|
116
|
+
describe_unreachable_wait(w, now=ctx.now) for w in waits[:5]
|
|
111
117
|
)
|
|
112
118
|
return CheckResult(
|
|
113
119
|
check_id="wedged_drive_queue",
|
|
@@ -119,11 +125,13 @@ def probe_wedged_drive_queue(ctx: HealthContext) -> CheckResult:
|
|
|
119
125
|
),
|
|
120
126
|
detail=(
|
|
121
127
|
f"e.g. {sample}" + (", ..." if len(waits) > 5 else "")
|
|
122
|
-
+ " —
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
|
|
128
|
+
+ " — fix per entry (never a blanket command — a "
|
|
129
|
+
"needs-decomposition/premise-refusal/upstream-gap park is NOT "
|
|
130
|
+
"cleared by `remove`+`add`): "
|
|
131
|
+
+ "; ".join(
|
|
132
|
+
f"{w.key}: {unreachable_wait_remedy_command(w)}"
|
|
133
|
+
for w in waits[:5]
|
|
134
|
+
)
|
|
127
135
|
),
|
|
128
136
|
threshold=(
|
|
129
137
|
"warn when any entry is blocked/parked with no branch/PR a sweep "
|
|
@@ -136,6 +144,7 @@ def probe_wedged_drive_queue(ctx: HealthContext) -> CheckResult:
|
|
|
136
144
|
{
|
|
137
145
|
"key": w.key,
|
|
138
146
|
"state": w.state,
|
|
147
|
+
"cause": w.cause,
|
|
139
148
|
"deferrals": w.deferrals,
|
|
140
149
|
"dependents": w.dependents,
|
|
141
150
|
"last_reason": w.last_reason,
|
|
@@ -296,11 +296,37 @@ def halted_drives(*, notifier_state: NotifierState, now: float) -> list[HaltedDr
|
|
|
296
296
|
that DOES carry a real ``proposed_command`` (because step 4 found at
|
|
297
297
|
least one genuinely blocked entry) is never a sentinel match here, so it
|
|
298
298
|
pages like any other halted drive.
|
|
299
|
+
|
|
300
|
+
#3983: the benign-sentinel skip above is exactly the gap that let
|
|
301
|
+
quadraui#2341 page nobody for ~13h. That row's own last_reason (a #3931
|
|
302
|
+
needs-decomposition park) qualifies `coord.drive_queue.
|
|
303
|
+
detect_unreachable_waits`'s #2944/#2978 guaranteed-false-wait shape, but
|
|
304
|
+
its 13 `waiting` dependents never reach `blocked` — `_resolve_prereqs`
|
|
305
|
+
treats a `parked` pre-req as an ordinary unsatisfied deferral, never the
|
|
306
|
+
unsatisfiable one a `blocked`/`failed` pre-req gets — so step 4 kept
|
|
307
|
+
re-writing the SAME benign sentinel over the root's own finding, every
|
|
308
|
+
3-minute tick, for as long as the dependents sat `waiting`. The
|
|
309
|
+
board-doctor alert tier (#3979's CAUSE_NEEDS_DECOMPOSITION) would also
|
|
310
|
+
page this root, but ships dry-run by default (#3758) and its own
|
|
311
|
+
hourly sweep is a separate, operator-armed opt-in — not something this
|
|
312
|
+
function may assume is on. So this directly re-derives the same live
|
|
313
|
+
finding `coord drive-queue status`'s `alert:` line and `coord doctor`'s
|
|
314
|
+
`wedged_drive_queue` WARN already show, straight from the queue, with
|
|
315
|
+
the REAL (repo, issue) of the root rather than the synthetic
|
|
316
|
+
`QUEUE_ALERT_REPO`/`QUEUE_ALERT_ISSUE` key step 4 writes to — one
|
|
317
|
+
detection (`detect_unreachable_waits`), three surfaces that can never
|
|
318
|
+
say different things (#2096).
|
|
319
|
+
|
|
320
|
+
A root already carrying its OWN real escalation record (any stage) is
|
|
321
|
+
skipped here — that record is richer (board-doctor's cause-specific
|
|
322
|
+
diagnosis, when it ran) and must not be shadowed by this generic
|
|
323
|
+
fallback finding the identical row a second time under a different
|
|
324
|
+
reason string.
|
|
299
325
|
"""
|
|
300
326
|
from coord.drive_queue import ( # noqa: PLC0415
|
|
301
327
|
QUEUE_ALERT_ISSUE,
|
|
302
|
-
QUEUE_ALERT_NO_REMEDY_COMMAND,
|
|
303
328
|
QUEUE_ALERT_REPO,
|
|
329
|
+
is_benign_queue_alert_command,
|
|
304
330
|
)
|
|
305
331
|
|
|
306
332
|
try:
|
|
@@ -309,10 +335,11 @@ def halted_drives(*, notifier_state: NotifierState, now: float) -> list[HaltedDr
|
|
|
309
335
|
records = list_drive_escalations()
|
|
310
336
|
except Exception as exc: # noqa: BLE001
|
|
311
337
|
log.debug("notifier: drive escalations unavailable (%s)", exc)
|
|
312
|
-
|
|
338
|
+
records = []
|
|
313
339
|
|
|
314
340
|
urgent = urgent_keys(notifier_state, now=now)
|
|
315
341
|
out: list[HaltedDrive] = []
|
|
342
|
+
escalated_keys: set[tuple[str, int]] = set()
|
|
316
343
|
for record in records:
|
|
317
344
|
repo = str(record.get("repo_name") or "")
|
|
318
345
|
try:
|
|
@@ -323,9 +350,11 @@ def halted_drives(*, notifier_state: NotifierState, now: float) -> list[HaltedDr
|
|
|
323
350
|
if (
|
|
324
351
|
repo == QUEUE_ALERT_REPO
|
|
325
352
|
and issue == QUEUE_ALERT_ISSUE
|
|
326
|
-
and command
|
|
353
|
+
and is_benign_queue_alert_command(command)
|
|
327
354
|
):
|
|
328
355
|
continue
|
|
356
|
+
if (repo, issue) != (QUEUE_ALERT_REPO, QUEUE_ALERT_ISSUE):
|
|
357
|
+
escalated_keys.add((repo, issue))
|
|
329
358
|
stage = str(record.get("stage") or "").strip()
|
|
330
359
|
reason = str(record.get("reason") or "").strip()
|
|
331
360
|
out.append(
|
|
@@ -337,6 +366,72 @@ def halted_drives(*, notifier_state: NotifierState, now: float) -> list[HaltedDr
|
|
|
337
366
|
proposed_command=command or None,
|
|
338
367
|
)
|
|
339
368
|
)
|
|
369
|
+
|
|
370
|
+
out.extend(
|
|
371
|
+
_unreachable_wait_halted_drives(escalated_keys, urgent=urgent, now=now)
|
|
372
|
+
)
|
|
373
|
+
return out
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
def _unreachable_wait_halted_drives(
|
|
377
|
+
escalated_keys: set[tuple[str, int]], *, urgent: set[str], now: float
|
|
378
|
+
) -> list[HaltedDrive]:
|
|
379
|
+
"""#3983: live `detect_unreachable_waits` roots, as `HaltedDrive`s.
|
|
380
|
+
|
|
381
|
+
``proposed_command`` is picked PER ROOT by
|
|
382
|
+
`coord.drive_queue.unreachable_wait_remedy_command` — never the blanket
|
|
383
|
+
`remove`+`add` requeue. For the three terminal-park causes (#3979's
|
|
384
|
+
`needs-decomposition`/`premise-refusal`/`upstream-gap-park`) that
|
|
385
|
+
requeue is actively wrong: the row's own `last_reason` already asserts
|
|
386
|
+
no relaunch can resolve it, and a requeue just relaunches the drive
|
|
387
|
+
straight back into re-emitting the identical park (the #3922
|
|
388
|
+
needs-decomposition incident `coord.drive_queue.
|
|
389
|
+
unreachable_wait_remedy_command`'s own docstring names). Those three
|
|
390
|
+
get the same read-only `coord drive-queue list` fallback #3016's
|
|
391
|
+
`merge_gate_remedy_command` uses for its own no-safe-command shapes
|
|
392
|
+
instead — the manual next step is still named inline in ``reason`` via
|
|
393
|
+
`describe_unreachable_wait`.
|
|
394
|
+
|
|
395
|
+
Fails open to ``[]`` like every other source in this module — a queue
|
|
396
|
+
read that errors must degrade silently, never take the whole notifier
|
|
397
|
+
tick down with it.
|
|
398
|
+
"""
|
|
399
|
+
from coord.drive_queue import ( # noqa: PLC0415
|
|
400
|
+
describe_unreachable_wait,
|
|
401
|
+
detect_unreachable_waits,
|
|
402
|
+
entries_from_rows,
|
|
403
|
+
parse_key,
|
|
404
|
+
unreachable_wait_remedy_command,
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
try:
|
|
408
|
+
from coord.state import list_drive_queue # noqa: PLC0415
|
|
409
|
+
|
|
410
|
+
waits = detect_unreachable_waits(entries_from_rows(list_drive_queue()))
|
|
411
|
+
except Exception as exc: # noqa: BLE001
|
|
412
|
+
log.debug("notifier: drive queue unavailable for unreachable-wait check (%s)", exc)
|
|
413
|
+
return []
|
|
414
|
+
|
|
415
|
+
out: list[HaltedDrive] = []
|
|
416
|
+
for wait in waits:
|
|
417
|
+
parsed = parse_key(wait.key)
|
|
418
|
+
if parsed is None:
|
|
419
|
+
continue
|
|
420
|
+
repo, issue = parsed
|
|
421
|
+
if (repo, issue) in escalated_keys:
|
|
422
|
+
continue
|
|
423
|
+
out.append(
|
|
424
|
+
HaltedDrive(
|
|
425
|
+
repo=repo,
|
|
426
|
+
issue=issue,
|
|
427
|
+
reason=(
|
|
428
|
+
"guaranteed-false wait (#2944/#2978): "
|
|
429
|
+
+ describe_unreachable_wait(wait, now=now)
|
|
430
|
+
),
|
|
431
|
+
urgent=urgent_key(repo, issue) in urgent,
|
|
432
|
+
proposed_command=unreachable_wait_remedy_command(wait),
|
|
433
|
+
)
|
|
434
|
+
)
|
|
340
435
|
return out
|
|
341
436
|
|
|
342
437
|
|