code-coordinator 0.5.257__tar.gz → 0.5.259__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.257 → code_coordinator-0.5.259}/PKG-INFO +1 -1
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/code_coordinator.egg-info/scm_file_list.json +1 -0
- code_coordinator-0.5.259/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/release.py +26 -1
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notify.py +38 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/reconcile.py +11 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/release_propagate.py +181 -33
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/review.py +178 -7
- code_coordinator-0.5.259/tests/test_release_roll_between_legs_2854.py +293 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_review.py +210 -0
- code_coordinator-0.5.257/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/.gitignore +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/CLAUDE.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/GOAL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/LICENSE +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/MANIFEST.in +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/README.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/__init__.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/agent.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/audit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/block_log.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/board_service.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/brain.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/claim.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/cli.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/client.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/comments.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/config.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/dao.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/db.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/deps.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/drive.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/events.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/filelock.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/freshness.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/gates.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/goal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/context.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/models.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/render.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/health/units.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/hooks.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/interactive.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/models.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/network.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/openapi.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/parentage.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/plans.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/progress.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/release_window.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/reports.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/self_health.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/smoke.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/split_work.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/sql.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/state.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/test_author.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/test_report.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/usage.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/install-agent.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/pyproject.toml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/setup.cfg +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/__init__.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/conftest.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_config.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_db.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_events.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_init.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_models.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_network.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_session.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_split.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_state.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/types/generated.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.257 → code_coordinator-0.5.259}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -667,6 +667,7 @@ tests/test_release_cordon_deadlock_2240.py
|
|
|
667
667
|
tests/test_release_cordon_stuck_2490.py
|
|
668
668
|
tests/test_release_propagate.py
|
|
669
669
|
tests/test_release_propagate_threshold.py
|
|
670
|
+
tests/test_release_roll_between_legs_2854.py
|
|
670
671
|
tests/test_release_roll_window_handoff.py
|
|
671
672
|
tests/test_release_unified_1242.py
|
|
672
673
|
tests/test_release_verify.py
|
{code_coordinator-0.5.257 → code_coordinator-0.5.259}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -739,6 +739,7 @@
|
|
|
739
739
|
"tests/test_release_cordon_stuck_2490.py",
|
|
740
740
|
"tests/test_release_propagate.py",
|
|
741
741
|
"tests/test_release_propagate_threshold.py",
|
|
742
|
+
"tests/test_release_roll_between_legs_2854.py",
|
|
742
743
|
"tests/test_release_roll_window_handoff.py",
|
|
743
744
|
"tests/test_release_unified_1242.py",
|
|
744
745
|
"tests/test_release_verify.py",
|
|
@@ -908,11 +908,16 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
908
908
|
# have happened at all). Feed the same seam so it defers like a live
|
|
909
909
|
# assignment instead of getting reaped.
|
|
910
910
|
extra_busy.extend(_confirmation_running_busy())
|
|
911
|
+
# #2854: `now` opts this run into the between-legs settle window — a
|
|
912
|
+
# drive-queue row that is `running` but has genuinely had no live
|
|
913
|
+
# assignment on its last-known host for at least the settle window rolls
|
|
914
|
+
# that host without waiting for the row to reach a terminal state.
|
|
911
915
|
quiescence = rp.assess_quiescence(
|
|
912
916
|
queue_entries=board.get("drive_queue") or [],
|
|
913
917
|
assignments=board.get("assignments") or [],
|
|
914
918
|
issues=board.get("issues") or [],
|
|
915
919
|
extra_busy=extra_busy,
|
|
920
|
+
now=time.time(),
|
|
916
921
|
)
|
|
917
922
|
record.quiescence = quiescence.to_dict()
|
|
918
923
|
if quiescence.stale:
|
|
@@ -927,6 +932,19 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
927
932
|
"tick --reconcile-only` to clear them for good)",
|
|
928
933
|
err=True,
|
|
929
934
|
)
|
|
935
|
+
if quiescence.settled:
|
|
936
|
+
# #2854: a `running` row whose host rolled BETWEEN LEGS — the row
|
|
937
|
+
# itself is still in flight, only the settled host is being treated
|
|
938
|
+
# as idle. Printed unconditionally, same reasoning as `stale` above:
|
|
939
|
+
# a host rolled mid-drive must leave a readable trace of why that was
|
|
940
|
+
# judged safe.
|
|
941
|
+
click.echo(
|
|
942
|
+
"note: rolling host(s) for drive-queue row(s) that are between "
|
|
943
|
+
f"legs and past the settle window: {', '.join(quiescence.settled)} "
|
|
944
|
+
"(#2854 — the row itself is still running; only the currently "
|
|
945
|
+
"idle host is being treated as quiescent)",
|
|
946
|
+
err=True,
|
|
947
|
+
)
|
|
930
948
|
|
|
931
949
|
hosts = [m.name for m in (getattr(config, "machines", ()) or ())]
|
|
932
950
|
busy_hosts = quiescence.busy_hosts()
|
|
@@ -2705,14 +2723,21 @@ def _drain(
|
|
|
2705
2723
|
rp.Busy(kind="board unreadable", subject="/board", detail=board_error)
|
|
2706
2724
|
)
|
|
2707
2725
|
extra_busy.extend(extra_busy_fetch())
|
|
2726
|
+
# #2854: same settle-window opt-in as the top-level `propagate` call
|
|
2727
|
+
# site — one clock read per poll, reused for both the settle window
|
|
2728
|
+
# and `elapsed` below, so a between-legs gap that crosses the settle
|
|
2729
|
+
# threshold mid-drain clears within THIS wait rather than only on
|
|
2730
|
+
# the next `coord release propagate` tick.
|
|
2731
|
+
poll_now = now_fn()
|
|
2708
2732
|
quiescence = rp.assess_quiescence(
|
|
2709
2733
|
queue_entries=board.get("drive_queue") or [],
|
|
2710
2734
|
assignments=board.get("assignments") or [],
|
|
2711
2735
|
issues=board.get("issues") or [],
|
|
2712
2736
|
extra_busy=extra_busy,
|
|
2737
|
+
now=poll_now,
|
|
2713
2738
|
)
|
|
2714
2739
|
busy = bool(quiescence.fleet_wide_busy) or daemon_host in quiescence.busy_hosts()
|
|
2715
|
-
elapsed =
|
|
2740
|
+
elapsed = poll_now - start
|
|
2716
2741
|
if not busy:
|
|
2717
2742
|
return rw.DrainOutcome(drained=True, elapsed_seconds=elapsed, detail="drained")
|
|
2718
2743
|
detail = quiescence.busy_reason_for_host(daemon_host) or quiescence.reason
|
|
@@ -3660,6 +3660,28 @@ def post_orphaned_review_findings(
|
|
|
3660
3660
|
return posted_ids
|
|
3661
3661
|
|
|
3662
3662
|
|
|
3663
|
+
def _dispatch_board_pending_pr_opens(config: Config) -> None:
|
|
3664
|
+
"""Load the board, open PRs for any work-leg completions still missing
|
|
3665
|
+
one, and save (#2844).
|
|
3666
|
+
|
|
3667
|
+
Runs BEFORE smoke/review dispatch so the ``pull_request`` CI run starts
|
|
3668
|
+
the instant a work leg pushes its branch, overlapping the ~20-minute
|
|
3669
|
+
smoke leg and the review leg instead of being serialised after both.
|
|
3670
|
+
`dispatch_pending_pr_opens` (:mod:`coord.review`) is itself idempotent —
|
|
3671
|
+
it always finds-or-creates via GitHub — so calling it every pass, even
|
|
3672
|
+
after `dispatch_review` already opened the PR, only ever finds the
|
|
3673
|
+
existing one. Mirrors :func:`_dispatch_board_pending_smoke` exactly, and
|
|
3674
|
+
is safe to call even when the board file doesn't exist.
|
|
3675
|
+
"""
|
|
3676
|
+
from coord.board_service import read_board, write_board
|
|
3677
|
+
from coord.review import dispatch_pending_pr_opens
|
|
3678
|
+
|
|
3679
|
+
board = read_board()
|
|
3680
|
+
opened = dispatch_pending_pr_opens(board, config)
|
|
3681
|
+
if opened:
|
|
3682
|
+
write_board(board)
|
|
3683
|
+
|
|
3684
|
+
|
|
3663
3685
|
def _dispatch_board_pending_smoke(config: Config) -> None:
|
|
3664
3686
|
"""Load the board, dispatch any pending Test-stage smoke, and save.
|
|
3665
3687
|
|
|
@@ -4223,6 +4245,15 @@ def _run_drain_locked(config: Config) -> DrainResult:
|
|
|
4223
4245
|
except Exception: # noqa: BLE001
|
|
4224
4246
|
log.exception("notify drain: stuck test_state sweep failed")
|
|
4225
4247
|
|
|
4248
|
+
# Step 2.5 (#2844): open PRs for work-leg completions still missing one —
|
|
4249
|
+
# BEFORE the Test-stage dispatch below, so the pull_request CI run starts
|
|
4250
|
+
# overlapping smoke instead of waiting for review dispatch to open the
|
|
4251
|
+
# PR ~20 minutes later.
|
|
4252
|
+
try:
|
|
4253
|
+
_dispatch_board_pending_pr_opens(config)
|
|
4254
|
+
except Exception: # noqa: BLE001
|
|
4255
|
+
log.exception("notify drain: PR-open dispatch failed")
|
|
4256
|
+
|
|
4226
4257
|
# Step 3: dispatch pending Test-stage smoke (#1426). Runs BEFORE review
|
|
4227
4258
|
# dispatch to mirror the pipeline's Work -> Test -> Review order.
|
|
4228
4259
|
try:
|
|
@@ -4524,6 +4555,13 @@ def run(
|
|
|
4524
4555
|
# dispatch — skipped while `_roll_pending` is true, same posture the
|
|
4525
4556
|
# drive-queue tick takes under a pending roll.
|
|
4526
4557
|
if not _roll_pending:
|
|
4558
|
+
# #2844: open PRs for work-leg completions still missing one, before
|
|
4559
|
+
# smoke/review dispatch — see _dispatch_board_pending_pr_opens.
|
|
4560
|
+
try:
|
|
4561
|
+
_dispatch_board_pending_pr_opens(config)
|
|
4562
|
+
except Exception: # noqa: BLE001
|
|
4563
|
+
pass
|
|
4564
|
+
|
|
4527
4565
|
try:
|
|
4528
4566
|
_dispatch_board_pending_smoke(config)
|
|
4529
4567
|
except Exception: # noqa: BLE001
|
|
@@ -2226,6 +2226,17 @@ def reconcile(board: Board, config: Config) -> list[str]:
|
|
|
2226
2226
|
_escalate_spend_ceiling_best_effort(a, entry)
|
|
2227
2227
|
changed.append(a.assignment_id)
|
|
2228
2228
|
|
|
2229
|
+
# Open PRs for completed work-like assignments still missing one (#2844).
|
|
2230
|
+
# Runs BEFORE smoke/review dispatch below so the pull_request CI run
|
|
2231
|
+
# starts overlapping the smoke leg instead of waiting for review dispatch
|
|
2232
|
+
# to open the PR itself once smoke finishes. Idempotent — see
|
|
2233
|
+
# dispatch_pending_pr_opens's docstring.
|
|
2234
|
+
from coord.review import dispatch_pending_pr_opens
|
|
2235
|
+
|
|
2236
|
+
for opened in dispatch_pending_pr_opens(board, config):
|
|
2237
|
+
if opened.assignment_id is not None:
|
|
2238
|
+
changed.append(opened.assignment_id)
|
|
2239
|
+
|
|
2229
2240
|
# Dispatch pending reviews for all completed work assignments.
|
|
2230
2241
|
# We iterate board.completed (not just newly-done) so that a failed
|
|
2231
2242
|
# dispatch on a previous reconcile pass is retried here automatically.
|
|
@@ -120,6 +120,34 @@ purpose: the daemon-host gate itself (`daemon_name in busy_hosts` in
|
|
|
120
120
|
message in `coord/release_cordon.py`) lives outside this module and needs
|
|
121
121
|
its own look before any loosening — this is the finding, not the fix.
|
|
122
122
|
|
|
123
|
+
#2854 IS THE LOOK #2618 DEFERRED
|
|
124
|
+
---------------------------------
|
|
125
|
+
#2618's finding was narrow on purpose: a live drive can now survive a
|
|
126
|
+
`coord-serve` restart, so "occupied anywhere" no longer needs to defer the
|
|
127
|
+
whole fleet — but `assess_quiescence` kept charging a between-legs `running`
|
|
128
|
+
row to its host for the entry's entire remaining lifetime regardless,
|
|
129
|
+
because #2240 only ever narrowed WHICH host that charge lands on, never
|
|
130
|
+
whether it should still apply once the thing it was protecting (an
|
|
131
|
+
in-flight worker process) is gone. Measured 2026-08-27: a propagate run
|
|
132
|
+
cordoned two idle hosts because a third issue's *work* leg had started three
|
|
133
|
+
minutes earlier, with smoke, review and merge still ahead of it — on that
|
|
134
|
+
day's numbers, an hour or more of cordon for hosts with nothing running on
|
|
135
|
+
them at all.
|
|
136
|
+
|
|
137
|
+
`assess_quiescence`'s `now`/`settle_seconds` close that gap: a between-legs
|
|
138
|
+
row (no live assignment right now) whose gap has already outlasted a short
|
|
139
|
+
debounce is moved out of `busy` into `Quiescence.settled` instead — visible,
|
|
140
|
+
never a silent drop, same as `stale` above. The debounce exists because "no
|
|
141
|
+
live assignment right now" is one momentary read of a gap that is normally
|
|
142
|
+
seconds long (see #2240's section below); requiring it to have already held
|
|
143
|
+
for `settle_seconds` (default 20s, matching #2139's identical-shaped
|
|
144
|
+
idle-restart debounce) is what keeps a lucky poll from reading a gap that is
|
|
145
|
+
about to close as though it were actually open. See `assess_quiescence`'s
|
|
146
|
+
own docstring for the exact mechanics, and #2854 for the fuller risk
|
|
147
|
+
analysis (`notify.lock`, intra-issue version skew, the drive process itself
|
|
148
|
+
never updating mid-run) that this fix does not, and does not need to, change
|
|
149
|
+
anything about.
|
|
150
|
+
|
|
123
151
|
LANE ORDER ANSWERS THE SKEW QUESTION
|
|
124
152
|
------------------------------------
|
|
125
153
|
#1835 asks whether a fleet mid-roll — hosts at two versions — is safe for
|
|
@@ -534,6 +562,14 @@ NO_OP_STATUSES: frozenset[str] = frozenset(
|
|
|
534
562
|
#: must not schedule an update the agent would then refuse.
|
|
535
563
|
LIVE_ASSIGNMENT_STATUSES: frozenset[str] = frozenset({"RUNNING", "PENDING"})
|
|
536
564
|
|
|
565
|
+
#: #2854: how long a host must show NO live assignment for an in-flight
|
|
566
|
+
#: (but between-legs) drive-queue entry before that gap counts as settled
|
|
567
|
+
#: enough to roll. Mirrors the #2139 idle-restart debounce's 20s window —
|
|
568
|
+
#: same shape of problem (a momentarily-quiet host that is about to become
|
|
569
|
+
#: busy again as the next leg lands), same fix. See :func:`assess_quiescence`
|
|
570
|
+
#: for how this is spent.
|
|
571
|
+
DEFAULT_BETWEEN_LEGS_SETTLE_SECONDS = 20.0
|
|
572
|
+
|
|
537
573
|
|
|
538
574
|
# ── busy signals ─────────────────────────────────────────────────────────────
|
|
539
575
|
|
|
@@ -663,6 +699,14 @@ class Quiescence:
|
|
|
663
699
|
#: doing the same disproof on its own cadence; this is the same evidence,
|
|
664
700
|
#: re-checked on READ so a stopped timer cannot make it unfalsifiable.
|
|
665
701
|
stale: tuple[str, ...] = ()
|
|
702
|
+
#: #2854: `running` queue rows that are genuinely BETWEEN LEGS (no live
|
|
703
|
+
#: assignment right now) and have stayed that way for at least the
|
|
704
|
+
#: settle window — see :func:`assess_quiescence`'s *now*/*settle_seconds*.
|
|
705
|
+
#: Not a busy signal (the whole point is that it does NOT block); not
|
|
706
|
+
#: silent either, same reasoning as `stale` above: a host rolled while
|
|
707
|
+
#: its issue's drive-queue row is still `running` must leave a readable
|
|
708
|
+
#: trace of why that was safe, not just a quiet absence from `busy`.
|
|
709
|
+
settled: tuple[str, ...] = ()
|
|
666
710
|
|
|
667
711
|
@property
|
|
668
712
|
def reason(self) -> str:
|
|
@@ -723,6 +767,7 @@ class Quiescence:
|
|
|
723
767
|
"busy": [asdict(b) for b in self.busy],
|
|
724
768
|
"fired_holds": list(self.fired_holds),
|
|
725
769
|
"stale": list(self.stale),
|
|
770
|
+
"settled": list(self.settled),
|
|
726
771
|
}
|
|
727
772
|
|
|
728
773
|
|
|
@@ -769,22 +814,22 @@ def _live_assignment_hosts(assignments: Iterable[Mapping[str, Any]]) -> dict[str
|
|
|
769
814
|
return hosts
|
|
770
815
|
|
|
771
816
|
|
|
772
|
-
def
|
|
773
|
-
|
|
817
|
+
def _last_assignment_rows(
|
|
818
|
+
assignments: Iterable[Mapping[str, Any]],
|
|
819
|
+
) -> dict[str, Mapping[str, Any]]:
|
|
820
|
+
"""``repo#issue`` → the single MOST RECENT assignment row for that key.
|
|
774
821
|
|
|
775
|
-
Any status, terminal included
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
NOT there is a drive whose every leg fell out of retention, and such an
|
|
782
|
-
entry keeps the old unattributable reading.
|
|
822
|
+
Any status, terminal included. The shared selection behind
|
|
823
|
+
:func:`_last_assignment_hosts` (which host) and
|
|
824
|
+
:func:`_last_assignment_idle_since` (#2854: how long that host has been
|
|
825
|
+
gone) — both must agree on WHICH row is "last", or a between-legs host
|
|
826
|
+
and its settle-window clock could end up describing two different
|
|
827
|
+
assignments.
|
|
783
828
|
|
|
784
829
|
Ordered by ``dispatched_at``, with rows that carry no timestamp treated
|
|
785
830
|
as oldest — a row we cannot place in time must never displace one we can.
|
|
786
831
|
"""
|
|
787
|
-
best: dict[str, tuple[float, str]] = {}
|
|
832
|
+
best: dict[str, tuple[float, Mapping[str, Any]]] = {}
|
|
788
833
|
for row in assignments:
|
|
789
834
|
machine = str(row.get("machine_name") or row.get("machine") or "") or None
|
|
790
835
|
if not machine:
|
|
@@ -796,8 +841,59 @@ def _last_assignment_hosts(assignments: Iterable[Mapping[str, Any]]) -> dict[str
|
|
|
796
841
|
key = _queue_key(row)
|
|
797
842
|
previous = best.get(key)
|
|
798
843
|
if previous is None or when >= previous[0]:
|
|
799
|
-
best[key] = (when,
|
|
800
|
-
return {key:
|
|
844
|
+
best[key] = (when, row)
|
|
845
|
+
return {key: row for key, (_, row) in best.items()}
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
def _last_assignment_hosts(assignments: Iterable[Mapping[str, Any]]) -> dict[str, str]:
|
|
849
|
+
"""``repo#issue`` → the machine that ran its MOST RECENT assignment (#2240).
|
|
850
|
+
|
|
851
|
+
Any status, terminal included — this is deliberately the "last known
|
|
852
|
+
host" lookup, used only when :func:`_live_assignment_hosts` has nothing
|
|
853
|
+
because the entry is between legs. ``/board`` publishes terminal
|
|
854
|
+
assignment rows within its retention window
|
|
855
|
+
(``coord.dao.board_projection``'s ``_capped_assignments``), so the
|
|
856
|
+
previous leg of a drive that finished minutes ago is right there; what is
|
|
857
|
+
NOT there is a drive whose every leg fell out of retention, and such an
|
|
858
|
+
entry keeps the old unattributable reading.
|
|
859
|
+
|
|
860
|
+
See :func:`_last_assignment_rows` for the row-selection rule this reads.
|
|
861
|
+
"""
|
|
862
|
+
return {
|
|
863
|
+
key: str(row.get("machine_name") or row.get("machine") or "")
|
|
864
|
+
for key, row in _last_assignment_rows(assignments).items()
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
def _last_assignment_idle_since(
|
|
869
|
+
assignments: Iterable[Mapping[str, Any]],
|
|
870
|
+
) -> dict[str, float]:
|
|
871
|
+
"""``repo#issue`` → when its last-known host stopped running it (#2854).
|
|
872
|
+
|
|
873
|
+
``finished_at`` off the SAME row :func:`_last_assignment_hosts` already
|
|
874
|
+
picked as "most recent" (see :func:`_last_assignment_rows`) — never a
|
|
875
|
+
second, independently-selected row, which could disagree about which
|
|
876
|
+
assignment is even being described.
|
|
877
|
+
|
|
878
|
+
A key is absent from the result — not mapped to ``0.0`` or any other
|
|
879
|
+
guess — when that row carries no readable ``finished_at`` (a legacy row,
|
|
880
|
+
or one written before the field existed). :func:`assess_quiescence`
|
|
881
|
+
treats an absent entry exactly like "not yet settled": a between-legs
|
|
882
|
+
gap this function cannot measure must never be read as long enough to
|
|
883
|
+
roll on a guess, the same "missing data fails toward the conservative
|
|
884
|
+
reading" rule the rest of this module already follows (see e.g.
|
|
885
|
+
`DRIFT_UNKNOWN` in `coord/release_cordon.py`).
|
|
886
|
+
"""
|
|
887
|
+
out: dict[str, float] = {}
|
|
888
|
+
for key, row in _last_assignment_rows(assignments).items():
|
|
889
|
+
raw = row.get("finished_at")
|
|
890
|
+
if raw is None:
|
|
891
|
+
continue
|
|
892
|
+
try:
|
|
893
|
+
out[key] = float(raw)
|
|
894
|
+
except (TypeError, ValueError):
|
|
895
|
+
continue
|
|
896
|
+
return out
|
|
801
897
|
|
|
802
898
|
|
|
803
899
|
def busy_host_for_entry(
|
|
@@ -895,6 +991,8 @@ def assess_quiescence(
|
|
|
895
991
|
assignments: Iterable[Mapping[str, Any]] = (),
|
|
896
992
|
issues: Iterable[Mapping[str, Any]] = (),
|
|
897
993
|
extra_busy: Iterable[Busy] = (),
|
|
994
|
+
now: float | None = None,
|
|
995
|
+
settle_seconds: float = DEFAULT_BETWEEN_LEGS_SETTLE_SECONDS,
|
|
898
996
|
) -> Quiescence:
|
|
899
997
|
"""Is the fleet idle enough to restart every agent on it?
|
|
900
998
|
|
|
@@ -955,6 +1053,38 @@ def assess_quiescence(
|
|
|
955
1053
|
``running`` row, never retry or block one — that stays the tick's job.
|
|
956
1054
|
It closes exactly the gap that let a landed row block a roll forever
|
|
957
1055
|
with no clock and no way to contradict it.
|
|
1056
|
+
|
|
1057
|
+
#2854: ROLL BETWEEN LEGS, NOT BETWEEN ISSUES. Even after #2240 narrowed a
|
|
1058
|
+
between-legs ``running`` row from fleet-wide to its one last-known host,
|
|
1059
|
+
that host stayed charged as busy for the entry's ENTIRE remaining
|
|
1060
|
+
lifetime — work, test, review, merge — including every gap between legs
|
|
1061
|
+
where no worker process is actually running there. #2618 established
|
|
1062
|
+
that a between-legs gap has nothing an agent restart could kill (no
|
|
1063
|
+
poll in flight survives a restart uneventfully, and no unretried write
|
|
1064
|
+
is outstanding either); this is the other half — actually treating that
|
|
1065
|
+
gap as idle instead of only proving it *could* be.
|
|
1066
|
+
|
|
1067
|
+
A between-legs row (no entry in *live_assignment_hosts*) is no longer
|
|
1068
|
+
unconditionally busy for its attributed host. It stays busy — same as
|
|
1069
|
+
before — unless ALL of: *now* is given (a caller that never asks for the
|
|
1070
|
+
settle window gets the old, safer-by-default behaviour), the row's last
|
|
1071
|
+
known host can actually be named, and :func:`_last_assignment_idle_since`
|
|
1072
|
+
can prove *at least* `settle_seconds` have passed since that host's last
|
|
1073
|
+
assignment for this entry actually **finished** (``finished_at`` — not
|
|
1074
|
+
when it was dispatched, which would only ever UNDERSTATE how recently a
|
|
1075
|
+
worker was alive there). Meeting all three moves the entry into
|
|
1076
|
+
:attr:`Quiescence.settled` instead of :attr:`Quiescence.busy` — visible,
|
|
1077
|
+
exactly like `stale` above, never a silent drop.
|
|
1078
|
+
|
|
1079
|
+
The settle window itself exists because "no live assignment right now"
|
|
1080
|
+
is a single, momentary read, and the between-legs gap it is trying to
|
|
1081
|
+
catch is normally seconds long (see the module docstring's #2240
|
|
1082
|
+
section) — a read that happens to land exactly inside one is not
|
|
1083
|
+
evidence the gap will still be open by the time a roll actually acts on
|
|
1084
|
+
it. Requiring the gap to have already lasted `settle_seconds` (default
|
|
1085
|
+
:data:`DEFAULT_BETWEEN_LEGS_SETTLE_SECONDS`, the same 20s the #2139
|
|
1086
|
+
idle-restart debounce uses for an identical shape of flapping) is a
|
|
1087
|
+
debounce, not a probability judgement — same mechanism, same reason.
|
|
958
1088
|
"""
|
|
959
1089
|
queue_entries = list(queue_entries)
|
|
960
1090
|
assignments = list(assignments)
|
|
@@ -962,10 +1092,12 @@ def assess_quiescence(
|
|
|
962
1092
|
board = build_board_view({"assignments": assignments, "issues": issues})
|
|
963
1093
|
live_assignment_hosts = _live_assignment_hosts(assignments)
|
|
964
1094
|
last_assignment_hosts = _last_assignment_hosts(assignments)
|
|
1095
|
+
last_assignment_idle_since = _last_assignment_idle_since(assignments)
|
|
965
1096
|
|
|
966
1097
|
busy: list[Busy] = []
|
|
967
1098
|
fired: list[str] = []
|
|
968
1099
|
stale: list[str] = []
|
|
1100
|
+
settled: list[str] = []
|
|
969
1101
|
|
|
970
1102
|
for entry in queue_entries:
|
|
971
1103
|
state = str(entry.get("state") or "")
|
|
@@ -980,29 +1112,44 @@ def assess_quiescence(
|
|
|
980
1112
|
host = busy_host_for_entry(
|
|
981
1113
|
entry, live_assignment_hosts, last_assignment_hosts
|
|
982
1114
|
)
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
# between a signal holding one machine and one holding the
|
|
986
|
-
# fleet, and a deferral nobody can take apart is a deferral
|
|
987
|
-
# nobody can act on.
|
|
988
|
-
detail = "restarting agents now would kill it mid-flight"
|
|
989
|
-
if (
|
|
990
|
-
host
|
|
1115
|
+
between_legs = (
|
|
1116
|
+
host is not None
|
|
991
1117
|
and not entry.get("machine")
|
|
992
1118
|
and key not in live_assignment_hosts
|
|
993
|
-
):
|
|
994
|
-
detail += (
|
|
995
|
-
"; between legs — attributed to its last known host "
|
|
996
|
-
"(#2240)"
|
|
997
|
-
)
|
|
998
|
-
busy.append(
|
|
999
|
-
Busy(
|
|
1000
|
-
kind="drive-queue entry running",
|
|
1001
|
-
subject=key,
|
|
1002
|
-
detail=detail,
|
|
1003
|
-
host=host,
|
|
1004
|
-
)
|
|
1005
1119
|
)
|
|
1120
|
+
# #2854: a between-legs row whose gap has already outlasted
|
|
1121
|
+
# the settle window is treated as genuinely idle for its
|
|
1122
|
+
# host, not merely "attributed and busy anyway" — see this
|
|
1123
|
+
# function's own docstring. `idle_for` stays `None` (never
|
|
1124
|
+
# settled) whenever it cannot be PROVEN: no `now`, or no
|
|
1125
|
+
# readable `finished_at` for the last assignment.
|
|
1126
|
+
idle_for = None
|
|
1127
|
+
if between_legs and now is not None:
|
|
1128
|
+
idle_since = last_assignment_idle_since.get(key)
|
|
1129
|
+
if idle_since is not None:
|
|
1130
|
+
idle_for = now - idle_since
|
|
1131
|
+
if idle_for is not None and idle_for >= settle_seconds:
|
|
1132
|
+
settled.append(key)
|
|
1133
|
+
else:
|
|
1134
|
+
# #2240: say WHICH reading named the host. "between legs,
|
|
1135
|
+
# attributed to its last known host" is the difference
|
|
1136
|
+
# between a signal holding one machine and one holding
|
|
1137
|
+
# the fleet, and a deferral nobody can take apart is a
|
|
1138
|
+
# deferral nobody can act on.
|
|
1139
|
+
detail = "restarting agents now would kill it mid-flight"
|
|
1140
|
+
if between_legs:
|
|
1141
|
+
detail += (
|
|
1142
|
+
"; between legs — attributed to its last known "
|
|
1143
|
+
"host (#2240)"
|
|
1144
|
+
)
|
|
1145
|
+
busy.append(
|
|
1146
|
+
Busy(
|
|
1147
|
+
kind="drive-queue entry running",
|
|
1148
|
+
subject=key,
|
|
1149
|
+
detail=detail,
|
|
1150
|
+
host=host,
|
|
1151
|
+
)
|
|
1152
|
+
)
|
|
1006
1153
|
# A *fired* gate is the opposite of busy — the queue has stopped
|
|
1007
1154
|
# itself waiting for precisely this deploy. Recorded, never counted.
|
|
1008
1155
|
if str(entry.get("hold_state") or "") == HOLD_FIRED:
|
|
@@ -1034,6 +1181,7 @@ def assess_quiescence(
|
|
|
1034
1181
|
busy=tuple(busy),
|
|
1035
1182
|
fired_holds=tuple(dict.fromkeys(fired)),
|
|
1036
1183
|
stale=tuple(dict.fromkeys(stale)),
|
|
1184
|
+
settled=tuple(dict.fromkeys(settled)),
|
|
1037
1185
|
)
|
|
1038
1186
|
|
|
1039
1187
|
|