code-coordinator 0.5.758__tar.gz → 0.5.760__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.760}/PKG-INFO +1 -1
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/PKG-INFO +1 -1
- code_coordinator-0.5.760/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/drive_queue.py +33 -15
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/decomposition_chat.py +113 -2
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/drive_queue.py +283 -32
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/wedged_drive_queue.py +22 -13
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/collect.py +98 -3
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_drive_queue.py +129 -1
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_decomposition_chat.py +133 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue.py +233 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/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.760}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/.gitignore +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/CLAUDE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/GOAL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/LICENSE +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/MANIFEST.in +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/README.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agent.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/app_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/app_drive_daemon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/backup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/block_log.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_doctor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_doctor_followthrough.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_doctor_permissions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_doctor_policy.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_service.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/brain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/briefing_lessons.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/claim.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/client.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/codegen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/app_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/comments.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dao.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/db.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-board-doctor.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-board-doctor.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/deps.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/entry_truth.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/events.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/filelock.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/freshness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gates.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/goal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/gui_lane_preflight.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/sustained_cpu.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/context.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/models.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/render.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/health/units.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/hooks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/interactive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/key_spec.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/models.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/native_fs_wait.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/native_pixels.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/network.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/nightly_runner.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/nightly_smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/nightly_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/nightly_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/notify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/openapi.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/parentage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/plans.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/preflight_size.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/prereview_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/progress.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/release_window.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/reports.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/review.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/self_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/shell_exec_wrap.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/split_work.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/sql.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/test_author.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/test_report.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/upstream_gaps.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/usage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-board-doctor.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-board-doctor.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/install-agent.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/pyproject.toml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/comment_cruft.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/setup.cfg +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/__init__.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/backends.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/conftest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_graceful_shutdown_3649.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_graph_refresh.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_app_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_doctor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_doctor_followthrough.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_doctor_permissions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_doctor_policy.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_nightly_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_briefing_lessons.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_drive_queue_investigate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_drive_queue_stranded_prereq.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_gates_next_action.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_inject_board_less.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_close_wrong_repo.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_smoke_nightly.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_smoke_nightly_sweep.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_nightly.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_client.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_comment_cruft.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_prereview_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_test_runner_venv_setup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_db.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_entry_truth.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_events.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_sustained_cpu.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_init.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_key_spec.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_merge_verification.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_models.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_models_pinned_1650.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_native_fs_wait.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_native_pixels.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_network.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_nightly_runner.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_nightly_smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_nightly_status.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_nightly_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_no_eligible_host_3600.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_pause_store_guard_recursion_3789.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plain_runner_smoke_3673.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_preflight_size.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_prereview_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_queue_diagnose.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_session.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke_plain_runner_3673.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_split.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_state.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_upstream_gaps.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.758 → code_coordinator-0.5.760}/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
|
|
@@ -46,6 +46,7 @@ from typing import TYPE_CHECKING, Any
|
|
|
46
46
|
|
|
47
47
|
if TYPE_CHECKING: # pragma: no cover - typing only
|
|
48
48
|
from coord.config import Config
|
|
49
|
+
from coord.milestone_order import WorkOrderNode
|
|
49
50
|
from coord.models import Assignment, Board, Machine, Repo, SplitProposal
|
|
50
51
|
from coord.preflight_size import SplitVerification
|
|
51
52
|
|
|
@@ -1314,6 +1315,98 @@ def parse_size_triage_response(
|
|
|
1314
1315
|
)
|
|
1315
1316
|
|
|
1316
1317
|
|
|
1318
|
+
def _repoint_queued_dependents_at_split(
|
|
1319
|
+
*,
|
|
1320
|
+
repo_name: str,
|
|
1321
|
+
original_issue: int,
|
|
1322
|
+
epic_number: int,
|
|
1323
|
+
remapped_nodes: tuple["WorkOrderNode", ...],
|
|
1324
|
+
origin: str,
|
|
1325
|
+
) -> None:
|
|
1326
|
+
"""Re-point every queued entry whose ``after=`` names *original_issue*
|
|
1327
|
+
onto the split's sink children (#3984).
|
|
1328
|
+
|
|
1329
|
+
Without this, ``drive_queue._resolve_prereqs``'s ``live_prereq_
|
|
1330
|
+
terminal`` recovery (#2602/#2850) reads a prerequisite a live re-check
|
|
1331
|
+
finds CLOSED as satisfied, whatever the reason it closed — so a
|
|
1332
|
+
dependent chained on the original would read it as "done" the instant
|
|
1333
|
+
:func:`file_and_queue_split_proposal` closes it as superseded, and
|
|
1334
|
+
launch before any split child has merged (the quadraui#2341 incident:
|
|
1335
|
+
13 rows would have launched against code the split hadn't landed yet).
|
|
1336
|
+
|
|
1337
|
+
Walks the WHOLE drive queue, not just *repo_name*'s — an ``after=`` key
|
|
1338
|
+
is fully-qualified (``repo#N``) and a dependent can live in a different
|
|
1339
|
+
repo than the original. Every matching row is rewritten with the SAME
|
|
1340
|
+
write path ``coord drive-queue add`` itself uses
|
|
1341
|
+
(:func:`coord.state.enqueue_drive_queue`), carrying forward every
|
|
1342
|
+
OTHER operator-declared field on that row untouched, then confirmed
|
|
1343
|
+
with a readback before moving to the next row — an unconfirmed rewrite
|
|
1344
|
+
is not a rewrite, same discipline the child-queuing loop above already
|
|
1345
|
+
applies. A row's ``last_reason`` also records why its edges changed, so
|
|
1346
|
+
``coord drive-queue list`` doesn't just show a different ``after=``
|
|
1347
|
+
with no explanation.
|
|
1348
|
+
|
|
1349
|
+
Raises (never swallows) on the first row that doesn't read back the new
|
|
1350
|
+
``after=`` — propagating straight out of
|
|
1351
|
+
:func:`file_and_queue_split_proposal`, which calls this BEFORE closing
|
|
1352
|
+
the original, so a raise here always aborts before that close.
|
|
1353
|
+
"""
|
|
1354
|
+
from coord.drive_queue import entry_key, rewrite_after_for_split, sink_children
|
|
1355
|
+
from coord.state import (
|
|
1356
|
+
enqueue_drive_queue,
|
|
1357
|
+
get_drive_queue_entry,
|
|
1358
|
+
list_drive_queue,
|
|
1359
|
+
update_drive_queue_entry,
|
|
1360
|
+
)
|
|
1361
|
+
|
|
1362
|
+
sink_issue_numbers = sink_children(remapped_nodes)
|
|
1363
|
+
original_key = entry_key(repo_name, original_issue)
|
|
1364
|
+
sink_keys = [entry_key(repo_name, n) for n in sink_issue_numbers]
|
|
1365
|
+
|
|
1366
|
+
for row in list_drive_queue():
|
|
1367
|
+
current_after = [str(a) for a in (row.get("after_json") or [])]
|
|
1368
|
+
if original_key not in current_after:
|
|
1369
|
+
continue
|
|
1370
|
+
dep_repo = str(row.get("repo_name") or "")
|
|
1371
|
+
dep_issue = int(row.get("issue_number") or 0)
|
|
1372
|
+
new_after = rewrite_after_for_split(current_after, original_key, sink_keys)
|
|
1373
|
+
|
|
1374
|
+
enqueue_drive_queue(
|
|
1375
|
+
dep_repo,
|
|
1376
|
+
dep_issue,
|
|
1377
|
+
machine=row.get("machine") or None,
|
|
1378
|
+
after=new_after,
|
|
1379
|
+
hold_after=bool(row.get("hold_after")),
|
|
1380
|
+
hold_reason=str(row.get("hold_reason") or ""),
|
|
1381
|
+
resume_when=str(row.get("resume_when") or ""),
|
|
1382
|
+
hold_scope=str(row.get("hold_scope") or "entry"),
|
|
1383
|
+
max_fix_rounds=row.get("max_fix_rounds"),
|
|
1384
|
+
no_acceptance=bool(row.get("no_acceptance")),
|
|
1385
|
+
plan_destructive=bool(row.get("plan_destructive")),
|
|
1386
|
+
)
|
|
1387
|
+
update_drive_queue_entry(
|
|
1388
|
+
dep_repo,
|
|
1389
|
+
dep_issue,
|
|
1390
|
+
last_reason=(
|
|
1391
|
+
f"re-pointed off superseded {original_key} onto #{epic_number}'s "
|
|
1392
|
+
f"split children ({', '.join(sink_keys)}) by the {origin}"
|
|
1393
|
+
),
|
|
1394
|
+
)
|
|
1395
|
+
|
|
1396
|
+
confirmed = get_drive_queue_entry(dep_repo, dep_issue)
|
|
1397
|
+
confirmed_after = (
|
|
1398
|
+
[str(a) for a in (confirmed.get("after_json") or [])]
|
|
1399
|
+
if confirmed is not None
|
|
1400
|
+
else None
|
|
1401
|
+
)
|
|
1402
|
+
if confirmed is None or sorted(confirmed_after) != sorted(new_after):
|
|
1403
|
+
raise RuntimeError(
|
|
1404
|
+
f"filed epic #{epic_number} but re-pointing queued dependent "
|
|
1405
|
+
f"{dep_repo}#{dep_issue} off superseded {original_key} did not "
|
|
1406
|
+
f"read back the new after= list"
|
|
1407
|
+
)
|
|
1408
|
+
|
|
1409
|
+
|
|
1317
1410
|
def file_and_queue_split_proposal(
|
|
1318
1411
|
*,
|
|
1319
1412
|
proposal: "SplitProposal",
|
|
@@ -1339,8 +1432,13 @@ def file_and_queue_split_proposal(
|
|
|
1339
1432
|
``proposal.chunks`` order, remap the placeholder work order onto the
|
|
1340
1433
|
real numbers and splice it into the epic body, queue each child
|
|
1341
1434
|
(confirming every queue write with a readback — an unconfirmed queue
|
|
1342
|
-
insert is not a queued child),
|
|
1343
|
-
|
|
1435
|
+
insert is not a queued child), re-point every ALREADY-queued entry
|
|
1436
|
+
whose ``after=`` names the original onto the split's sink children
|
|
1437
|
+
(:func:`_repoint_queued_dependents_at_split`, #3984 — otherwise
|
|
1438
|
+
``drive_queue._resolve_prereqs``'s ``live_prereq_terminal`` recovery
|
|
1439
|
+
reads the original's close as "pre-req satisfied" and launches every
|
|
1440
|
+
dependent before any child has landed), then close the original issue
|
|
1441
|
+
pointing at the new epic — forcing past the "open children" guard (the
|
|
1344
1442
|
original's own body is exactly the shape expected to trip it once it
|
|
1345
1443
|
already carries a ``## Sub-issues``/``## Work order`` block, e.g. from
|
|
1346
1444
|
a prior triage pass) and confirming the close itself with a readback,
|
|
@@ -1410,6 +1508,19 @@ def file_and_queue_split_proposal(
|
|
|
1410
1508
|
"did not read back from the drive queue"
|
|
1411
1509
|
)
|
|
1412
1510
|
|
|
1511
|
+
# #3984: before closing the original, re-point every dependent ALREADY
|
|
1512
|
+
# queued against it onto the split's children — a failure here raises
|
|
1513
|
+
# and propagates straight out of this function, same as every other
|
|
1514
|
+
# step above, so the original is never closed with a dependent still
|
|
1515
|
+
# pointing at it.
|
|
1516
|
+
_repoint_queued_dependents_at_split(
|
|
1517
|
+
repo_name=repo.name,
|
|
1518
|
+
original_issue=proposal.issue_number,
|
|
1519
|
+
epic_number=epic_number,
|
|
1520
|
+
remapped_nodes=remapped_nodes,
|
|
1521
|
+
origin=origin,
|
|
1522
|
+
)
|
|
1523
|
+
|
|
1413
1524
|
# `force=True`: the original being split is likely to already carry a
|
|
1414
1525
|
# `## Sub-issues`/`## Work order` block of its own (e.g. a prior triage
|
|
1415
1526
|
# pass), which would otherwise trip `close_issue()`'s open-children
|
|
@@ -114,7 +114,7 @@ from coord.merge_queue import (
|
|
|
114
114
|
is_ci_unreadable_reason,
|
|
115
115
|
is_stale_smoke_reason,
|
|
116
116
|
)
|
|
117
|
-
from coord.milestone_order import TRACKING_ISSUE_LABEL
|
|
117
|
+
from coord.milestone_order import TRACKING_ISSUE_LABEL, WorkOrderNode
|
|
118
118
|
from coord.models import (
|
|
119
119
|
CLOSES_ISSUE_TYPES,
|
|
120
120
|
EPIC_DECOMPOSE_TYPE,
|
|
@@ -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
|
|
@@ -1636,6 +1650,51 @@ def parse_after_spec(raw: str | Iterable[str], default_repo: str) -> list[str]:
|
|
|
1636
1650
|
return out
|
|
1637
1651
|
|
|
1638
1652
|
|
|
1653
|
+
def sink_children(nodes: Iterable[WorkOrderNode]) -> list[int]:
|
|
1654
|
+
"""The subset of a split's children nothing else in *nodes* depends on.
|
|
1655
|
+
|
|
1656
|
+
A split's own ``after=`` graph can fan out into more than one
|
|
1657
|
+
independent chain (e.g. ``C1 -> C2`` alongside a parallel ``C3``) — this
|
|
1658
|
+
is every chain's own tail, i.e. the split's full "everything landed"
|
|
1659
|
+
frontier. :func:`coord.decomposition_chat.file_and_queue_split_proposal`
|
|
1660
|
+
re-points a dependent chained on the SUPERSEDED original onto exactly
|
|
1661
|
+
this set: a dependent re-pointed at only the last-filed child would
|
|
1662
|
+
launch the moment that ONE chain lands, while a sibling chain is still
|
|
1663
|
+
mid-flight (#3984).
|
|
1664
|
+
|
|
1665
|
+
Order follows *nodes*' own order, not issue-number order — filed issue
|
|
1666
|
+
numbers need not increase in work-order position order.
|
|
1667
|
+
"""
|
|
1668
|
+
nodes = list(nodes)
|
|
1669
|
+
depended_on = {dep for node in nodes for dep in node.after}
|
|
1670
|
+
return [node.issue_number for node in nodes if node.issue_number not in depended_on]
|
|
1671
|
+
|
|
1672
|
+
|
|
1673
|
+
def rewrite_after_for_split(
|
|
1674
|
+
after: Sequence[str], original_key: str, sink_keys: Sequence[str]
|
|
1675
|
+
) -> list[str]:
|
|
1676
|
+
"""Drop *original_key* from *after* and append *sink_keys* in its place.
|
|
1677
|
+
|
|
1678
|
+
Every OTHER pre-req *after* already names (the ``X`` in ``after=O,X``)
|
|
1679
|
+
is kept, untouched — a dependent chained on more than the superseded
|
|
1680
|
+
original still waits on those too. De-duplicates, preserving
|
|
1681
|
+
first-seen order, so a dependent that already names one of the sink
|
|
1682
|
+
children (unusual, but not impossible) doesn't end up listing it
|
|
1683
|
+
twice. Returns a list with the same keys and order as *after* — never
|
|
1684
|
+
raises — when *original_key* isn't present; callers are expected to
|
|
1685
|
+
check that themselves before deciding whether a rewrite happened.
|
|
1686
|
+
"""
|
|
1687
|
+
kept = [key for key in after if key != original_key]
|
|
1688
|
+
if len(kept) == len(after):
|
|
1689
|
+
return kept
|
|
1690
|
+
seen = set(kept)
|
|
1691
|
+
for key in sink_keys:
|
|
1692
|
+
if key not in seen:
|
|
1693
|
+
seen.add(key)
|
|
1694
|
+
kept.append(key)
|
|
1695
|
+
return kept
|
|
1696
|
+
|
|
1697
|
+
|
|
1639
1698
|
# ── the queue row ────────────────────────────────────────────────────────────
|
|
1640
1699
|
|
|
1641
1700
|
|
|
@@ -4196,6 +4255,16 @@ class UnreachableWait:
|
|
|
4196
4255
|
is accurate even though those dependents themselves never appear in the
|
|
4197
4256
|
result (see the predicate's own docstring for why). `0` for an entry
|
|
4198
4257
|
nothing is chained behind.
|
|
4258
|
+
|
|
4259
|
+
`cause` (#3983) is :func:`classify_unreachable_wait_cause`'s verdict —
|
|
4260
|
+
one of :data:`UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION`/
|
|
4261
|
+
`_PREMISE_REFUSAL`/`_UPSTREAM_GAP_PARK` for a terminal park, or
|
|
4262
|
+
`_DISPATCH_FAILURE`/`_NEVER_DISPATCHED` for the two shapes
|
|
4263
|
+
:func:`is_unreachable_wait_shape` itself distinguishes. `reason_at` is
|
|
4264
|
+
`entry.reason_at` carried straight through — the wall-clock stamp of
|
|
4265
|
+
when `last_reason` (hence this wait) was written, so a renderer can
|
|
4266
|
+
show how long the row has sat this way instead of a bare, undated
|
|
4267
|
+
reason (#2133's rule, applied here).
|
|
4199
4268
|
"""
|
|
4200
4269
|
|
|
4201
4270
|
key: str
|
|
@@ -4203,6 +4272,8 @@ class UnreachableWait:
|
|
|
4203
4272
|
deferrals: int
|
|
4204
4273
|
last_reason: str
|
|
4205
4274
|
dependents: int = 0
|
|
4275
|
+
cause: str = ""
|
|
4276
|
+
reason_at: float | None = None
|
|
4206
4277
|
|
|
4207
4278
|
|
|
4208
4279
|
def is_unreachable_wait_shape(entry: QueueEntry) -> bool:
|
|
@@ -4273,6 +4344,135 @@ def is_unreachable_wait_shape(entry: QueueEntry) -> bool:
|
|
|
4273
4344
|
return entry.state == STATE_BLOCKED and _is_dispatch_failure_reason(entry.last_reason)
|
|
4274
4345
|
|
|
4275
4346
|
|
|
4347
|
+
# #3983: the cause label `classify_unreachable_wait_cause` assigns a row
|
|
4348
|
+
# matching `is_unreachable_wait_shape`. The three terminal-park values are
|
|
4349
|
+
# the SAME strings `coord.queue_diagnose` names
|
|
4350
|
+
# `CAUSE_NEEDS_DECOMPOSITION`/`CAUSE_PREMISE_REFUSAL`/`CAUSE_UPSTREAM_GAP_PARK`
|
|
4351
|
+
# — deliberately not imported from there: `coord.queue_diagnose` imports
|
|
4352
|
+
# `QueueEntry`/`is_unreachable_wait_shape` FROM this module, so importing its
|
|
4353
|
+
# constants back here would cycle. Keeping the literal text identical is
|
|
4354
|
+
# what lets a reader compare `coord drive-queue status`'s alert and `coord
|
|
4355
|
+
# drive-queue diagnose`'s verdict for the same row without translating
|
|
4356
|
+
# between two vocabularies for the same finding (#2096).
|
|
4357
|
+
UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION = "needs-decomposition"
|
|
4358
|
+
UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL = "premise-refusal"
|
|
4359
|
+
UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK = "upstream-gap-park"
|
|
4360
|
+
#: `attempts > 0`, exhausted the retry budget with no #2273 dispatch-layer
|
|
4361
|
+
#: assignment ever created — the second `is_unreachable_wait_shape` branch.
|
|
4362
|
+
UNREACHABLE_WAIT_CAUSE_DISPATCH_FAILURE = "dispatch-failure"
|
|
4363
|
+
#: `attempts == 0`, no terminal-park marker — the original #2944 shape:
|
|
4364
|
+
#: nothing has ever tried to dispatch this row at all.
|
|
4365
|
+
UNREACHABLE_WAIT_CAUSE_NEVER_DISPATCHED = "never-dispatched"
|
|
4366
|
+
|
|
4367
|
+
#: The three causes a worker/park-writer already asserted are terminal —
|
|
4368
|
+
#: "no fix-it leg or relaunch can resolve this" is the row's OWN last_reason
|
|
4369
|
+
#: text, not a guess this module is making. See
|
|
4370
|
+
#: :func:`unreachable_wait_remedy_command` for why that rules out the
|
|
4371
|
+
#: blanket `remove && add` requeue for exactly these three.
|
|
4372
|
+
_UNREACHABLE_WAIT_TERMINAL_PARK_CAUSES = frozenset(
|
|
4373
|
+
{
|
|
4374
|
+
UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION,
|
|
4375
|
+
UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL,
|
|
4376
|
+
UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK,
|
|
4377
|
+
}
|
|
4378
|
+
)
|
|
4379
|
+
|
|
4380
|
+
_UNREACHABLE_WAIT_CAUSE_LABEL: dict[str, str] = {
|
|
4381
|
+
UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION: "needs-decomposition park (#3931)",
|
|
4382
|
+
UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL: "premise-refusal park (#3164)",
|
|
4383
|
+
UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK: "upstream-gap park (#3977)",
|
|
4384
|
+
UNREACHABLE_WAIT_CAUSE_DISPATCH_FAILURE: "exhausted dispatch-layer death (#2273)",
|
|
4385
|
+
UNREACHABLE_WAIT_CAUSE_NEVER_DISPATCHED: "never dispatched",
|
|
4386
|
+
}
|
|
4387
|
+
|
|
4388
|
+
#: The manual next-step for a cause no blind command can fix — embedded
|
|
4389
|
+
#: straight into :func:`describe_unreachable_wait` so the reason text stays
|
|
4390
|
+
#: self-contained even where :func:`unreachable_wait_remedy_command` can only
|
|
4391
|
+
#: offer a read-only fallback (#3983).
|
|
4392
|
+
_UNREACHABLE_WAIT_CAUSE_MANUAL_NOTE: dict[str, str] = {
|
|
4393
|
+
UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION: (
|
|
4394
|
+
"not fixable by any fix-it leg or relaunch — decompose the issue "
|
|
4395
|
+
"into the proposed sub-issues and clear the row by hand"
|
|
4396
|
+
),
|
|
4397
|
+
UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL: (
|
|
4398
|
+
"not fixable by a requeue alone — run `coord drive-queue "
|
|
4399
|
+
"clear-refusal` once the missing prerequisite is confirmed, THEN "
|
|
4400
|
+
"`coord drive-queue remove` + `add`"
|
|
4401
|
+
),
|
|
4402
|
+
UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK: (
|
|
4403
|
+
"not fixable by any fix-it leg or relaunch — clear the row by hand "
|
|
4404
|
+
"once the release lands or the gap is confirmed"
|
|
4405
|
+
),
|
|
4406
|
+
}
|
|
4407
|
+
|
|
4408
|
+
|
|
4409
|
+
def classify_unreachable_wait_cause(entry: QueueEntry) -> str:
|
|
4410
|
+
"""Which `is_unreachable_wait_shape` branch explains *entry*'s wedge.
|
|
4411
|
+
|
|
4412
|
+
Read straight off `entry.last_reason` via the same marker predicates
|
|
4413
|
+
`coord.drive_queue`'s own parked pre-pass and
|
|
4414
|
+
`coord.queue_diagnose._rule_terminal_park` already trust for this text
|
|
4415
|
+
— never a live probe, so this is exactly as cheap as the shape check
|
|
4416
|
+
itself (#2096: one question, one answer, asked the same way everywhere).
|
|
4417
|
+
Callers are expected to gate on :func:`is_unreachable_wait_shape` first;
|
|
4418
|
+
called on a row that fails that shape, this still returns a value
|
|
4419
|
+
rather than raising (the two dispatch-shaped labels degrade safely for
|
|
4420
|
+
an unmatched row — see :func:`unreachable_wait_remedy_command`, which
|
|
4421
|
+
treats an unrecognised cause the same as "never dispatched").
|
|
4422
|
+
"""
|
|
4423
|
+
reason = entry.last_reason
|
|
4424
|
+
if is_premise_refusal_reason(reason):
|
|
4425
|
+
return UNREACHABLE_WAIT_CAUSE_PREMISE_REFUSAL
|
|
4426
|
+
if is_needs_decomposition_reason(reason):
|
|
4427
|
+
return UNREACHABLE_WAIT_CAUSE_NEEDS_DECOMPOSITION
|
|
4428
|
+
if is_upstream_gap_park_reason(reason):
|
|
4429
|
+
return UNREACHABLE_WAIT_CAUSE_UPSTREAM_GAP_PARK
|
|
4430
|
+
if entry.attempts and _is_dispatch_failure_reason(reason):
|
|
4431
|
+
return UNREACHABLE_WAIT_CAUSE_DISPATCH_FAILURE
|
|
4432
|
+
return UNREACHABLE_WAIT_CAUSE_NEVER_DISPATCHED
|
|
4433
|
+
|
|
4434
|
+
|
|
4435
|
+
def unreachable_wait_remedy_command(w: UnreachableWait) -> str:
|
|
4436
|
+
"""The one-line fix for *w*, picked by `.cause` (#3983) — never the
|
|
4437
|
+
blanket `coord drive-queue remove && add` requeue for a cause the row's
|
|
4438
|
+
OWN last_reason already asserts no relaunch can resolve.
|
|
4439
|
+
|
|
4440
|
+
Mirrors :func:`merge_gate_remedy_command`'s #3016 rule for the same
|
|
4441
|
+
reason: a wrong "run this" is worse than no recommendation, so a cause
|
|
4442
|
+
with no blind-safe command falls back to the identical read-only
|
|
4443
|
+
inspect pattern (`coord drive-queue list`, scoped to the entry's repo)
|
|
4444
|
+
rather than ever proposing `remove`+`add` for a needs-decomposition,
|
|
4445
|
+
premise-refusal or upstream-gap park — relaunching one of those just
|
|
4446
|
+
re-runs the drive straight back into the identical park (the #3922
|
|
4447
|
+
needs-decomposition incident this guards against).
|
|
4448
|
+
"""
|
|
4449
|
+
parsed = parse_key(w.key)
|
|
4450
|
+
repo, issue = parsed if parsed is not None else ("", 0)
|
|
4451
|
+
if w.cause in _UNREACHABLE_WAIT_TERMINAL_PARK_CAUSES:
|
|
4452
|
+
return f"coord drive-queue list --repo {repo}"
|
|
4453
|
+
return (
|
|
4454
|
+
f"coord drive-queue remove {repo} {issue} && "
|
|
4455
|
+
f"coord drive-queue add {repo} {issue}"
|
|
4456
|
+
)
|
|
4457
|
+
|
|
4458
|
+
|
|
4459
|
+
def format_coarse_duration(delta_seconds: float) -> str:
|
|
4460
|
+
"""``42s`` / ``3h`` / ``5d`` — coarse, single-unit (#2133's ask).
|
|
4461
|
+
|
|
4462
|
+
Shared by :func:`describe_unreachable_wait` and
|
|
4463
|
+
`coord.commands.drive_queue`'s own age renderings (imported from here
|
|
4464
|
+
rather than re-implemented) so "how long has this held" always reads
|
|
4465
|
+
the same shape everywhere it is shown.
|
|
4466
|
+
"""
|
|
4467
|
+
if delta_seconds < 60:
|
|
4468
|
+
return f"{int(delta_seconds)}s"
|
|
4469
|
+
if delta_seconds < 3600:
|
|
4470
|
+
return f"{int(delta_seconds // 60)}m"
|
|
4471
|
+
if delta_seconds < 86400:
|
|
4472
|
+
return f"{int(delta_seconds // 3600)}h"
|
|
4473
|
+
return f"{int(delta_seconds // 86400)}d"
|
|
4474
|
+
|
|
4475
|
+
|
|
4276
4476
|
def is_unreachable_wait(
|
|
4277
4477
|
entry: QueueEntry,
|
|
4278
4478
|
*,
|
|
@@ -4327,21 +4527,74 @@ def detect_unreachable_waits(
|
|
|
4327
4527
|
deferrals=e.deferrals,
|
|
4328
4528
|
last_reason=e.last_reason,
|
|
4329
4529
|
dependents=dependents_of.get(e.key, 0),
|
|
4530
|
+
cause=classify_unreachable_wait_cause(e),
|
|
4531
|
+
reason_at=e.reason_at,
|
|
4330
4532
|
)
|
|
4331
4533
|
)
|
|
4332
4534
|
return waits
|
|
4333
4535
|
|
|
4334
4536
|
|
|
4335
|
-
def
|
|
4537
|
+
def describe_unreachable_wait(w: UnreachableWait, *, now: float | None = None) -> str:
|
|
4538
|
+
"""Render one :class:`UnreachableWait` — the entry, its cause (#3983),
|
|
4539
|
+
how long it has sat this way, and (#2978) its dependent count when
|
|
4540
|
+
non-zero, naming WHY those dependents need no remedy of their own (they
|
|
4541
|
+
self-heal on #2756 the moment the root clears, so a reader must not
|
|
4542
|
+
read this as "fix these too").
|
|
4543
|
+
|
|
4544
|
+
*now* is the caller's wall clock: omitted (the default), the age clause
|
|
4545
|
+
is left out rather than guessed — the same degrade `_reason_age_suffix`
|
|
4546
|
+
uses for a row with no `reason_at` at all. Every live caller has a
|
|
4547
|
+
clock available (`time.time()` for the CLI/notifier, `ctx.now` for the
|
|
4548
|
+
health probe) and is expected to pass it; only a clockless test exercises
|
|
4549
|
+
the bare form.
|
|
4550
|
+
|
|
4551
|
+
One rendering, shared by :func:`unreachable_wait_alert` (the `coord
|
|
4552
|
+
drive-queue status` `alert:` line), `coord doctor`'s WARN sample
|
|
4553
|
+
(:mod:`coord.health.checks.wedged_drive_queue`) and (#3983)
|
|
4554
|
+
:mod:`coord.notifier.collect`'s own per-root ``HaltedDrive`` reason —
|
|
4555
|
+
so the CLI, the health probe and the pager phrase the identical finding
|
|
4556
|
+
identically rather than drifting apart (#2096).
|
|
4557
|
+
"""
|
|
4558
|
+
age = ""
|
|
4559
|
+
if now is not None and w.reason_at is not None:
|
|
4560
|
+
age = f", stuck {format_coarse_duration(max(0.0, now - w.reason_at))}"
|
|
4561
|
+
cause_label = _UNREACHABLE_WAIT_CAUSE_LABEL.get(w.cause, w.cause or "unknown cause")
|
|
4562
|
+
base = f"{w.key} ({w.state}, {cause_label}, {w.deferrals} deferrals{age})"
|
|
4563
|
+
notes: list[str] = []
|
|
4564
|
+
manual_note = _UNREACHABLE_WAIT_CAUSE_MANUAL_NOTE.get(w.cause)
|
|
4565
|
+
if manual_note:
|
|
4566
|
+
notes.append(manual_note)
|
|
4567
|
+
if w.dependents:
|
|
4568
|
+
plural = "y" if w.dependents == 1 else "ies"
|
|
4569
|
+
notes.append(
|
|
4570
|
+
f"{w.dependents} dependent entr{plural} chained behind it will "
|
|
4571
|
+
"self-heal automatically once this clears (#2756), no remedy "
|
|
4572
|
+
"needed on them"
|
|
4573
|
+
)
|
|
4574
|
+
if notes:
|
|
4575
|
+
base += " — " + "; ".join(notes)
|
|
4576
|
+
return base
|
|
4577
|
+
|
|
4578
|
+
|
|
4579
|
+
def unreachable_wait_alert(
|
|
4580
|
+
waits: Sequence[UnreachableWait], *, now: float | None = None
|
|
4581
|
+
) -> QueueAlert:
|
|
4336
4582
|
"""The queue-level record #2944's predicate raises, in :func:`_hold_alert`'s
|
|
4337
4583
|
shape — a message naming the entry (or entries), the evidence that
|
|
4338
|
-
qualified it, and the
|
|
4584
|
+
qualified it, and the remedy that actually clears it.
|
|
4585
|
+
|
|
4586
|
+
#3983: the remedy is picked PER ENTRY by :func:`unreachable_wait_remedy_command`
|
|
4587
|
+
— never the blanket ``remove`` + ``add`` for a needs-decomposition/
|
|
4588
|
+
premise-refusal/upstream-gap park, each of which the row's own
|
|
4589
|
+
last_reason already asserts no relaunch can resolve (see that
|
|
4590
|
+
function's docstring). The top-level ``command`` field mirrors the
|
|
4591
|
+
single entry's remedy when there is exactly one; with several entries
|
|
4592
|
+
of possibly different causes there is no one command that is safe for
|
|
4593
|
+
all of them, so it falls back to the same read-only ``coord
|
|
4594
|
+
drive-queue list`` #3016's ``merge_gate_remedy_command`` falls back to
|
|
4595
|
+
— the per-entry remedy is still named in ``details`` and inline in
|
|
4596
|
+
``reason`` via :func:`describe_unreachable_wait`.
|
|
4339
4597
|
|
|
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
4598
|
Named INLINE in ``reason`` (not only in ``command``, which
|
|
4346
4599
|
``drive-queue status``'s plain-text rendering never echoes — only its
|
|
4347
4600
|
``gate_readings``/``details`` lines are printed) so the remedy is visible
|
|
@@ -4358,42 +4611,40 @@ def unreachable_wait_alert(waits: Sequence[UnreachableWait]) -> QueueAlert:
|
|
|
4358
4611
|
that were never named — but easy to mis-generalize to "the dependents
|
|
4359
4612
|
too" by an operator who does not already know #2756 self-heals them.
|
|
4360
4613
|
"""
|
|
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])
|
|
4614
|
+
names = ", ".join(describe_unreachable_wait(w, now=now) for w in waits[:5])
|
|
4373
4615
|
more = ", ..." if len(waits) > 5 else ""
|
|
4374
4616
|
plural = len(waits) != 1
|
|
4617
|
+
if len(waits) == 1:
|
|
4618
|
+
command = unreachable_wait_remedy_command(waits[0])
|
|
4619
|
+
elif waits and all(
|
|
4620
|
+
w.cause not in _UNREACHABLE_WAIT_TERMINAL_PARK_CAUSES for w in waits
|
|
4621
|
+
):
|
|
4622
|
+
command = (
|
|
4623
|
+
"coord drive-queue remove <repo> <issue> && "
|
|
4624
|
+
"coord drive-queue add <repo> <issue> — for each ROOT entry "
|
|
4625
|
+
"named above; any dependents chained behind it self-heal on "
|
|
4626
|
+
"their own (#2756)"
|
|
4627
|
+
)
|
|
4628
|
+
else:
|
|
4629
|
+
command = "coord drive-queue list # remedy differs per entry — see above"
|
|
4375
4630
|
return QueueAlert(
|
|
4376
4631
|
reason=(
|
|
4377
4632
|
f"{len(waits)} queue entr{'ies' if plural else 'y'} stuck in a "
|
|
4378
4633
|
"guaranteed-false wait — blocked/parked with no branch/PR/"
|
|
4379
4634
|
"merge-queue row any sweep could ever act on (never dispatched, "
|
|
4380
4635
|
"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
|
-
"
|
|
4636
|
+
f"no sweep can ever clear this on its own: {names}{more}. Fix "
|
|
4637
|
+
"is named per entry above — a needs-decomposition/"
|
|
4638
|
+
"premise-refusal/upstream-gap park is NEVER cleared by `remove`"
|
|
4639
|
+
"+`add`, only an ordinary never-dispatched/dispatch-failure root is."
|
|
4385
4640
|
),
|
|
4386
4641
|
details=tuple(
|
|
4387
|
-
f"{w.key}: {w.state}, {w.deferrals} deferrals, "
|
|
4388
|
-
f"dependents={w.dependents}, last_reason={w.last_reason!r}"
|
|
4642
|
+
f"{w.key}: {w.state}, cause={w.cause}, {w.deferrals} deferrals, "
|
|
4643
|
+
f"dependents={w.dependents}, last_reason={w.last_reason!r}, "
|
|
4644
|
+
f"fix={unreachable_wait_remedy_command(w)}"
|
|
4389
4645
|
for w in waits
|
|
4390
4646
|
),
|
|
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
|
-
),
|
|
4647
|
+
command=command,
|
|
4397
4648
|
)
|
|
4398
4649
|
|
|
4399
4650
|
|