code-coordinator 0.5.268__tar.gz → 0.5.270__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.268 → code_coordinator-0.5.270}/PKG-INFO +1 -1
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/drive_queue.py +113 -9
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/release.py +71 -5
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/drive_queue.py +37 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/review.py +108 -2
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_release_propagate.py +31 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_release_window.py +53 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_propagate_threshold.py +56 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_roll_window_handoff.py +93 -0
- code_coordinator-0.5.270/tests/test_stale_busy_reviewer_697.py +192 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/.gitignore +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/CLAUDE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/GOAL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/LICENSE +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/MANIFEST.in +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/README.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/agent.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/block_log.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/board_service.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/brain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/claim.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/client.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/comments.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/dao.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/db.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/deps.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/drive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/events.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/filelock.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/freshness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/gates.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/goal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/context.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/models.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/render.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/health/units.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/hooks.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/interactive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/models.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/network.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/notify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/openapi.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/parentage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/plans.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/progress.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/release_window.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/reports.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/self_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/smoke.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/split_work.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/sql.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/test_author.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/test_report.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/usage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/install-agent.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/pyproject.toml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/setup.cfg +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/conftest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_db.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_events.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_init.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_models.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_network.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_review.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_session.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_split.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/types/generated.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.270}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -714,6 +714,7 @@ tests/test_split.py
|
|
|
714
714
|
tests/test_split_work.py
|
|
715
715
|
tests/test_sql_dialect.py
|
|
716
716
|
tests/test_stage_projection.py
|
|
717
|
+
tests/test_stale_busy_reviewer_697.py
|
|
717
718
|
tests/test_stalled_pipeline.py
|
|
718
719
|
tests/test_state.py
|
|
719
720
|
tests/test_state_review_findings_daemon.py
|
{code_coordinator-0.5.268 → code_coordinator-0.5.270}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -786,6 +786,7 @@
|
|
|
786
786
|
"tests/test_split_work.py",
|
|
787
787
|
"tests/test_sql_dialect.py",
|
|
788
788
|
"tests/test_stage_projection.py",
|
|
789
|
+
"tests/test_stale_busy_reviewer_697.py",
|
|
789
790
|
"tests/test_stalled_pipeline.py",
|
|
790
791
|
"tests/test_state.py",
|
|
791
792
|
"tests/test_state_review_findings_daemon.py",
|
|
@@ -2587,6 +2587,68 @@ def clear_roll_pending() -> None:
|
|
|
2587
2587
|
pass
|
|
2588
2588
|
|
|
2589
2589
|
|
|
2590
|
+
def _roll_pending_may_fire(*, occupied: int, now: float, queue_rows) -> tuple[bool, str]:
|
|
2591
|
+
"""Is it worth attempting to fire a pending roll THIS tick? (#2870 part 2)
|
|
2592
|
+
|
|
2593
|
+
#2587's original rule was ``occupied == 0`` — this tick's own
|
|
2594
|
+
reconciliation (`_reconcile_running`'s ``occupies`` verdict) found
|
|
2595
|
+
literally nothing left running. That rule never learned #2854: `coord
|
|
2596
|
+
release propagate`'s own quiescence check
|
|
2597
|
+
(:func:`coord.release_propagate.assess_quiescence`) treats a `running`
|
|
2598
|
+
drive-queue row with no LIVE assignment right now, past its settle
|
|
2599
|
+
window, as genuinely idle — the row just hasn't reached a terminal state
|
|
2600
|
+
yet (nothing has reconciled it to ``done``). This tick's own ``occupied``
|
|
2601
|
+
count has no such reading: a between-legs row launched on a different
|
|
2602
|
+
host reads ``unknown`` here (#1870 — this tick's local tmux check proves
|
|
2603
|
+
nothing about a row launched elsewhere) and stays charged, forever,
|
|
2604
|
+
against an ``occupied == 0`` bar it can never clear. The 2026-08-28
|
|
2605
|
+
incident this closes: `coord release propagate`, run directly, reported
|
|
2606
|
+
``quiescent — nothing in flight`` (between-legs, past the settle window)
|
|
2607
|
+
for the SAME row this tick's own ``occupied`` reading was still counting
|
|
2608
|
+
— so the tick never even ATTEMPTED the roll `coord release propagate`
|
|
2609
|
+
would have accepted.
|
|
2610
|
+
|
|
2611
|
+
``occupied == 0`` stays the cheap fast path — no extra board read. Only
|
|
2612
|
+
when it is nonzero does this re-derive the SAME between-legs/settle-
|
|
2613
|
+
window reading `coord release propagate` itself makes, from a fresh
|
|
2614
|
+
board fetch. This is an ADVISORY re-check, not the authoritative one:
|
|
2615
|
+
firing merely hands off to `coord-release-window.service`, which invokes
|
|
2616
|
+
`coord release propagate` for real (never `--force`) and simply defers
|
|
2617
|
+
again — costing nothing — if this read turns out to have been too
|
|
2618
|
+
optimistic. So there is no harm in checking, and every reason to: the
|
|
2619
|
+
alternative is a marker that can sit past its own between-legs row
|
|
2620
|
+
forever with `coord drive-queue status` reporting `alert: (none)` the
|
|
2621
|
+
whole time, because from the queue's own point of view nothing is wrong
|
|
2622
|
+
— it is waiting on a roll, exactly as designed.
|
|
2623
|
+
|
|
2624
|
+
*queue_rows* are the SAME raw `drive_queue` rows this tick already read
|
|
2625
|
+
(`coord.state.list_drive_queue()`) — reused rather than re-fetched, and
|
|
2626
|
+
passed straight through as `assess_quiescence`'s ``queue_entries``: that
|
|
2627
|
+
function reads the raw ``state``/``repo_name``/``issue_number`` columns,
|
|
2628
|
+
not `QueueEntry` or `BoardView`'s reduced shapes.
|
|
2629
|
+
|
|
2630
|
+
A board this cannot read degrades to "no, don't fire" (never raises) —
|
|
2631
|
+
the tick's own fail-closed abort already covers a board it cannot read
|
|
2632
|
+
for reconciliation; a re-check that itself cannot read the board must
|
|
2633
|
+
not provoke a fire it cannot justify.
|
|
2634
|
+
"""
|
|
2635
|
+
if occupied == 0:
|
|
2636
|
+
return True, ""
|
|
2637
|
+
from coord import release_propagate as rp # noqa: PLC0415
|
|
2638
|
+
|
|
2639
|
+
try:
|
|
2640
|
+
payload = _fetch_board_payload()
|
|
2641
|
+
except Exception: # noqa: BLE001 — see docstring: fail closed, never raise
|
|
2642
|
+
return False, ""
|
|
2643
|
+
quiescence = rp.assess_quiescence(
|
|
2644
|
+
queue_entries=queue_rows,
|
|
2645
|
+
assignments=payload.get("assignments") or [],
|
|
2646
|
+
issues=payload.get("issues") or [],
|
|
2647
|
+
now=now,
|
|
2648
|
+
)
|
|
2649
|
+
return quiescence.quiescent, quiescence.reason
|
|
2650
|
+
|
|
2651
|
+
|
|
2590
2652
|
def _fire_pending_roll(*, dry_run: bool = False) -> tuple[bool, str]:
|
|
2591
2653
|
"""Best-effort ``systemctl --user start --no-block
|
|
2592
2654
|
coord-release-window.service`` (#2587 design point 3).
|
|
@@ -2954,16 +3016,22 @@ def _escalate_persistent_self_cordon(
|
|
|
2954
3016
|
_write_self_cordon_state(state)
|
|
2955
3017
|
|
|
2956
3018
|
|
|
2957
|
-
def
|
|
2958
|
-
"""
|
|
3019
|
+
def _fetch_board_payload() -> dict:
|
|
3020
|
+
"""The raw ``/board`` payload (+ standalone top-ups), untyped.
|
|
2959
3021
|
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
3022
|
+
Split out of :func:`_fetch_board_view` (#2870) so a caller that needs the
|
|
3023
|
+
RAW ``assignments``/``issues`` rows — not `BoardView`'s already-reduced
|
|
3024
|
+
per-issue facts — has one place to get them. :func:`coord.
|
|
3025
|
+
release_propagate.assess_quiescence` is exactly such a caller (#2870's
|
|
3026
|
+
between-legs settle-window re-check for the roll-pending fire condition,
|
|
3027
|
+
see :func:`_roll_pending_may_fire`): it reads raw assignment rows
|
|
3028
|
+
(``machine_name``/``dispatched_at``/``finished_at``) `BoardView` never
|
|
3029
|
+
carries at all.
|
|
3030
|
+
|
|
3031
|
+
Raises whatever the fetch raised — same fail-closed contract as before
|
|
3032
|
+
this split.
|
|
2964
3033
|
"""
|
|
2965
3034
|
from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
|
|
2966
|
-
from coord.drive import list_drive_sessions # noqa: PLC0415
|
|
2967
3035
|
from coord.drive_state import BoardFetcher # noqa: PLC0415
|
|
2968
3036
|
|
|
2969
3037
|
payload = BoardFetcher().fetch()
|
|
@@ -2986,6 +3054,20 @@ def _fetch_board_view() -> BoardView:
|
|
|
2986
3054
|
top_up["merge_queue"] = _local_merge_queue_rows()
|
|
2987
3055
|
if top_up:
|
|
2988
3056
|
payload = {**payload, **top_up}
|
|
3057
|
+
return payload
|
|
3058
|
+
|
|
3059
|
+
|
|
3060
|
+
def _fetch_board_view() -> BoardView:
|
|
3061
|
+
"""Board + live drive sessions, typed.
|
|
3062
|
+
|
|
3063
|
+
Raises whatever the fetch raised — the caller turns that into a fail-closed
|
|
3064
|
+
abort. ``list_drive_sessions()`` is deliberately NOT allowed to fail the
|
|
3065
|
+
tick: it returns ``[]`` when tmux is unavailable, and the board's
|
|
3066
|
+
``active_work`` signal still holds the capacity line in that case.
|
|
3067
|
+
"""
|
|
3068
|
+
from coord.drive import list_drive_sessions # noqa: PLC0415
|
|
3069
|
+
|
|
3070
|
+
payload = _fetch_board_payload()
|
|
2989
3071
|
return build_board_view(payload, list_drive_sessions())
|
|
2990
3072
|
|
|
2991
3073
|
|
|
@@ -4382,7 +4464,12 @@ def drive_queue_tick(
|
|
|
4382
4464
|
f"could not read the board — aborting without launching anything: {exc}"
|
|
4383
4465
|
) from None
|
|
4384
4466
|
|
|
4385
|
-
entries
|
|
4467
|
+
# #2870: the raw rows are kept alongside the typed `entries` — see
|
|
4468
|
+
# `_roll_pending_may_fire`'s `queue_rows` parameter, which needs the
|
|
4469
|
+
# untyped `state`/`repo_name`/`issue_number` shape
|
|
4470
|
+
# `coord.release_propagate.assess_quiescence` reads, not `QueueEntry`.
|
|
4471
|
+
raw_queue_rows = list_drive_queue()
|
|
4472
|
+
entries = entries_from_rows(raw_queue_rows)
|
|
4386
4473
|
|
|
4387
4474
|
# #2587: is a fleet roll queued for the next inter-drive gap? Read
|
|
4388
4475
|
# BEFORE `effective_capacity` is resolved — a live, unexpired marker
|
|
@@ -4563,7 +4650,24 @@ def drive_queue_tick(
|
|
|
4563
4650
|
# `--dry-run`'s "mutate nothing" contract for every other write in
|
|
4564
4651
|
# this function.
|
|
4565
4652
|
if roll_pending is not None:
|
|
4566
|
-
|
|
4653
|
+
# #2870: `plan.occupied == 0` alone is the pre-#2854 reading —
|
|
4654
|
+
# a between-legs row with no live assignment right now, past
|
|
4655
|
+
# its settle window, can sit `occupied` here (e.g. #1870's
|
|
4656
|
+
# `unknown` verdict for a row launched on another host)
|
|
4657
|
+
# forever, even though `coord release propagate` itself would
|
|
4658
|
+
# already call the fleet quiescent for that exact row. See
|
|
4659
|
+
# `_roll_pending_may_fire`'s own docstring for the full
|
|
4660
|
+
# mechanism and the incident this closes.
|
|
4661
|
+
fire_ready, fire_note = _roll_pending_may_fire(
|
|
4662
|
+
occupied=plan.occupied, now=now, queue_rows=raw_queue_rows
|
|
4663
|
+
)
|
|
4664
|
+
if fire_ready:
|
|
4665
|
+
if plan.occupied and fire_note:
|
|
4666
|
+
click.echo(
|
|
4667
|
+
f"(queue still shows {plan.occupied} occupying a slot, "
|
|
4668
|
+
f"but #2854's settle-window reading calls it quiescent — "
|
|
4669
|
+
f"{fire_note} — attempting the roll anyway)"
|
|
4670
|
+
)
|
|
4567
4671
|
fired, detail = _fire_pending_roll()
|
|
4568
4672
|
if fired:
|
|
4569
4673
|
# #2587 review: this must NOT clear the marker. `fired`
|
|
@@ -654,11 +654,24 @@ def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
|
|
|
654
654
|
|
|
655
655
|
|
|
656
656
|
def _ensure_roll_pending_marker(
|
|
657
|
-
target_version: str, *, reason: str,
|
|
657
|
+
target_version: str, *, reason: str, min_releases_behind: int | None = None,
|
|
658
|
+
dry_run: bool = False,
|
|
658
659
|
) -> None:
|
|
659
660
|
"""#2587: make sure a roll-pending marker exists for *target_version*,
|
|
660
661
|
without resetting an already-live one's clock.
|
|
661
662
|
|
|
663
|
+
#2870: *min_releases_behind* is the effective `propagation.
|
|
664
|
+
min_releases_behind`/`--min-behind` threshold THIS run resolved and
|
|
665
|
+
already gated on before reaching this call (see the #2583 gate just
|
|
666
|
+
above this function's one call site) — stamped onto the marker
|
|
667
|
+
(`RollPending.min_releases_behind`) so whatever eventually discharges it
|
|
668
|
+
(`coord.commands.release._run_propagate`, threaded a matching
|
|
669
|
+
`--min-behind`) is gated at the SAME threshold this arm used, not
|
|
670
|
+
whatever threshold ITS OWN invocation happens to resolve. Like
|
|
671
|
+
`target_version`/`reason`, this is updated on every re-arm (a re-arm is
|
|
672
|
+
a fresh decision about what SHOULD roll and at what threshold) — only
|
|
673
|
+
`set_at`/`deferrals` stay frozen (see below).
|
|
674
|
+
|
|
662
675
|
#2869: ``dry_run=True`` is the ONE seam every call site must go through —
|
|
663
676
|
it never touches disk, only echoing what it *would* have written, in the
|
|
664
677
|
same "would ..." register as ``_fire_pending_roll``'s and
|
|
@@ -712,7 +725,10 @@ def _ensure_roll_pending_marker(
|
|
|
712
725
|
)
|
|
713
726
|
return
|
|
714
727
|
write_roll_pending(
|
|
715
|
-
_dataclasses.replace(
|
|
728
|
+
_dataclasses.replace(
|
|
729
|
+
existing, target_version=target_version, reason=reason,
|
|
730
|
+
min_releases_behind=min_releases_behind,
|
|
731
|
+
)
|
|
716
732
|
)
|
|
717
733
|
return
|
|
718
734
|
if dry_run:
|
|
@@ -723,7 +739,10 @@ def _ensure_roll_pending_marker(
|
|
|
723
739
|
)
|
|
724
740
|
return
|
|
725
741
|
write_roll_pending(
|
|
726
|
-
RollPending(
|
|
742
|
+
RollPending(
|
|
743
|
+
target_version=target_version, set_at=_time.time(), reason=reason,
|
|
744
|
+
min_releases_behind=min_releases_behind,
|
|
745
|
+
)
|
|
727
746
|
)
|
|
728
747
|
|
|
729
748
|
|
|
@@ -1123,7 +1142,14 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
1123
1142
|
# too, so a plain periodic `coord-release-propagate.timer` run also
|
|
1124
1143
|
# arms the drive-queue tick's own inter-drive-gap trigger instead of
|
|
1125
1144
|
# requiring an operator to separately reach for `nightly-window`.
|
|
1126
|
-
|
|
1145
|
+
# #2870: stamp THIS run's own already-passed `effective_min_behind`
|
|
1146
|
+
# (resolved above, 3a) onto the marker, so whatever discharges it is
|
|
1147
|
+
# gated at the threshold that armed it, not a threshold re-resolved
|
|
1148
|
+
# from scratch later.
|
|
1149
|
+
_ensure_roll_pending_marker(
|
|
1150
|
+
record.target_version, reason="propagate",
|
|
1151
|
+
min_releases_behind=effective_min_behind, dry_run=dry_run,
|
|
1152
|
+
)
|
|
1127
1153
|
_finish(rp.STATUS_DEFERRED, 0)
|
|
1128
1154
|
|
|
1129
1155
|
still_busy = busy_hosts - set(current)
|
|
@@ -2846,7 +2872,7 @@ def _latest_propagate_record_since(state_dir: Path, since: float) -> dict | None
|
|
|
2846
2872
|
|
|
2847
2873
|
def _run_propagate(
|
|
2848
2874
|
*, daemon_host: str, target_version: str, config_path: Path, state_dir: Path,
|
|
2849
|
-
runner=None, now_fn=None,
|
|
2875
|
+
min_behind: int | None = None, runner=None, now_fn=None,
|
|
2850
2876
|
) -> tuple[str, int, str, float | None]:
|
|
2851
2877
|
"""``coord release propagate --daemon-host ... --target ... --json``.
|
|
2852
2878
|
|
|
@@ -2858,6 +2884,20 @@ def _run_propagate(
|
|
|
2858
2884
|
run decided was needed is the version that actually rolls, even if a new
|
|
2859
2885
|
release lands on PyPI mid-drain.
|
|
2860
2886
|
|
|
2887
|
+
#2870: *min_behind*, when given, is passed through as `--min-behind` —
|
|
2888
|
+
the threshold the roll-pending marker being discharged here was ARMED
|
|
2889
|
+
at (`RollPending.min_releases_behind`), NOT this process's own
|
|
2890
|
+
`propagation.min_releases_behind`. Before this, this call never passed
|
|
2891
|
+
`--min-behind` at all, so `coord release propagate` always re-resolved
|
|
2892
|
+
ITS OWN threshold from `coordinator.yml` — a marker armed below the
|
|
2893
|
+
fleet default (e.g. `coord release nightly-window --min-behind 1`
|
|
2894
|
+
against a fleet configured `min_releases_behind: 5`) could never reach
|
|
2895
|
+
the threshold ITS discharge required and held forever, `alert: (none)`
|
|
2896
|
+
the whole time. ``None`` (an old marker with no recorded threshold, or
|
|
2897
|
+
one whose arming run never evaluated the gate) omits the flag, matching
|
|
2898
|
+
the pre-#2870 behaviour — this process resolves its own default exactly
|
|
2899
|
+
as it always did.
|
|
2900
|
+
|
|
2861
2901
|
Returns ``(status, exit_code, combined_output, propagate_started_at)``.
|
|
2862
2902
|
``status`` is read from the propagation journal entry that run itself
|
|
2863
2903
|
wrote (:func:`_latest_propagate_record_since`) — the same ground truth
|
|
@@ -2883,6 +2923,8 @@ def _run_propagate(
|
|
|
2883
2923
|
"--daemon-host", daemon_host, "--target", target_version,
|
|
2884
2924
|
"--json", "--config", str(config_path),
|
|
2885
2925
|
]
|
|
2926
|
+
if min_behind is not None:
|
|
2927
|
+
argv.extend(["--min-behind", str(min_behind)])
|
|
2886
2928
|
try:
|
|
2887
2929
|
proc = run(argv, capture_output=True, text=True, timeout=1800)
|
|
2888
2930
|
except Exception as exc: # noqa: BLE001
|
|
@@ -3224,9 +3266,24 @@ def release_nightly_window(
|
|
|
3224
3266
|
# attempt, safe to make redundantly since `coord release propagate`
|
|
3225
3267
|
# never carries `--force` here (trap 1) and simply defers again if
|
|
3226
3268
|
# the fleet is still busy.
|
|
3269
|
+
# #2870: gate the discharge at the threshold the marker was ARMED
|
|
3270
|
+
# at (`existing.min_releases_behind`), not whatever `coord release
|
|
3271
|
+
# propagate` would re-resolve on its own — that mismatch is exactly
|
|
3272
|
+
# how a marker armed via `--min-behind 1` froze the queue against a
|
|
3273
|
+
# fleet configured `min_releases_behind: 5`, forever holding at "3
|
|
3274
|
+
# behind, threshold 5" no matter how many times this fired. A
|
|
3275
|
+
# marker with no recorded threshold (written before this field
|
|
3276
|
+
# existed, or whose arming run never evaluated the gate at all)
|
|
3277
|
+
# falls back to THIS run's own `effective_min_behind` — the same
|
|
3278
|
+
# value it would have used before #2870.
|
|
3227
3279
|
prop_status, prop_exit, prop_output, prop_started_at = _run_propagate(
|
|
3228
3280
|
daemon_host=daemon_name, target_version=existing.target_version,
|
|
3229
3281
|
config_path=config_path, state_dir=state_dir,
|
|
3282
|
+
min_behind=(
|
|
3283
|
+
existing.min_releases_behind
|
|
3284
|
+
if existing.min_releases_behind is not None
|
|
3285
|
+
else effective_min_behind
|
|
3286
|
+
),
|
|
3230
3287
|
)
|
|
3231
3288
|
record.propagate_status = prop_status
|
|
3232
3289
|
record.propagate_exit_code = prop_exit
|
|
@@ -3303,6 +3360,13 @@ def release_nightly_window(
|
|
|
3303
3360
|
# re-arm — the queue froze because the bound that was supposed to save it
|
|
3304
3361
|
# could never be reached. Only a genuinely fresh marker (no existing one
|
|
3305
3362
|
# at all) gets a new clock.
|
|
3363
|
+
# #2870: every write below stamps `effective_min_behind` — THIS run's
|
|
3364
|
+
# own already-resolved threshold (section 2b above) — onto the marker,
|
|
3365
|
+
# so `_run_propagate`'s belt-and-braces call above (and any future
|
|
3366
|
+
# discharge) is gated at the SAME threshold that armed it, not whatever
|
|
3367
|
+
# `coord release propagate` would re-resolve on its own later. Updated
|
|
3368
|
+
# on every re-arm, same as `target_version`/`reason` just below — only
|
|
3369
|
+
# `set_at`/`deferrals` are the frozen "clock" #2607 protects.
|
|
3306
3370
|
if existing is not None:
|
|
3307
3371
|
click.echo(
|
|
3308
3372
|
f"replacing stale roll-pending marker ({existing.describe()}) "
|
|
@@ -3313,6 +3377,7 @@ def release_nightly_window(
|
|
|
3313
3377
|
write_roll_pending(
|
|
3314
3378
|
_dataclasses.replace(
|
|
3315
3379
|
existing, target_version=record.target_version, reason="nightly-window",
|
|
3380
|
+
min_releases_behind=effective_min_behind,
|
|
3316
3381
|
)
|
|
3317
3382
|
)
|
|
3318
3383
|
else:
|
|
@@ -3321,6 +3386,7 @@ def release_nightly_window(
|
|
|
3321
3386
|
target_version=record.target_version,
|
|
3322
3387
|
set_at=time.time(),
|
|
3323
3388
|
reason="nightly-window",
|
|
3389
|
+
min_releases_behind=effective_min_behind,
|
|
3324
3390
|
)
|
|
3325
3391
|
)
|
|
3326
3392
|
click.echo(
|
|
@@ -1561,6 +1561,26 @@ class RollPending:
|
|
|
1561
1561
|
#: fleet still busy — bumped by the shell each tick it does NOT fire the
|
|
1562
1562
|
#: roll. Never bumped by `plan_tick` itself (pure; no counting state).
|
|
1563
1563
|
deferrals: int = 0
|
|
1564
|
+
#: #2870: the ``propagation.min_releases_behind``/``--min-behind``
|
|
1565
|
+
#: threshold this marker was ARMED at — `coord release nightly-window`/
|
|
1566
|
+
#: `coord.commands.release._ensure_roll_pending_marker` stamp the
|
|
1567
|
+
#: effective threshold THEIR OWN run resolved (override, else
|
|
1568
|
+
#: `coordinator.yml`, else 1) at the moment they write this marker.
|
|
1569
|
+
#: Before #2870, discharge (`_run_propagate`'s `coord release propagate`
|
|
1570
|
+
#: subprocess) always re-resolved its OWN threshold from scratch — the
|
|
1571
|
+
#: fleet default, never whatever `--min-behind` armed this marker at —
|
|
1572
|
+
#: so a marker armed below the fleet default (e.g. a
|
|
1573
|
+
#: `coord-release-window.service` ExecStart carrying `--min-behind 1`
|
|
1574
|
+
#: against a fleet configured `min_releases_behind: 5`) could never
|
|
1575
|
+
#: reach the threshold its own discharge path required and froze the
|
|
1576
|
+
#: queue forever. Carried through to `_run_propagate` as `--min-behind`
|
|
1577
|
+
#: so discharge is gated at the SAME threshold arm used. `None` for a
|
|
1578
|
+
#: marker written before this field existed (`from_dict`'s tolerant
|
|
1579
|
+
#: parse) or one whose arming run never evaluated the gate at all
|
|
1580
|
+
#: (`effective_min_behind <= 1`) — the discharge call then falls back to
|
|
1581
|
+
#: ITS OWN effective threshold, matching the pre-#2870 behaviour rather
|
|
1582
|
+
#: than guessing.
|
|
1583
|
+
min_releases_behind: int | None = None
|
|
1564
1584
|
|
|
1565
1585
|
def expired(self, now: float) -> bool:
|
|
1566
1586
|
"""Has this marker outlived ITS OWN bound — TTL or deferral ceiling?
|
|
@@ -1589,6 +1609,7 @@ class RollPending:
|
|
|
1589
1609
|
"ttl_seconds": self.ttl_seconds,
|
|
1590
1610
|
"max_deferrals": self.max_deferrals,
|
|
1591
1611
|
"deferrals": self.deferrals,
|
|
1612
|
+
"min_releases_behind": self.min_releases_behind,
|
|
1592
1613
|
}
|
|
1593
1614
|
|
|
1594
1615
|
@classmethod
|
|
@@ -1615,6 +1636,7 @@ class RollPending:
|
|
|
1615
1636
|
data.get("max_deferrals"), ROLL_PENDING_DEFAULT_MAX_DEFERRALS
|
|
1616
1637
|
),
|
|
1617
1638
|
deferrals=_as_int_default(data.get("deferrals"), 0),
|
|
1639
|
+
min_releases_behind=_as_optional_int(data.get("min_releases_behind")),
|
|
1618
1640
|
)
|
|
1619
1641
|
|
|
1620
1642
|
|
|
@@ -1632,6 +1654,21 @@ def _as_int_default(value: Any, default: int) -> int:
|
|
|
1632
1654
|
return default
|
|
1633
1655
|
|
|
1634
1656
|
|
|
1657
|
+
def _as_optional_int(value: Any) -> int | None:
|
|
1658
|
+
"""Tolerant parse for a field that is legitimately absent (``None``),
|
|
1659
|
+
unlike :func:`_as_int_default`'s fields which always have a real
|
|
1660
|
+
fallback — see `RollPending.min_releases_behind`'s own docstring for why
|
|
1661
|
+
"not recorded" must stay `None` rather than silently becoming some
|
|
1662
|
+
default int a caller could mistake for a real threshold.
|
|
1663
|
+
"""
|
|
1664
|
+
if value is None:
|
|
1665
|
+
return None
|
|
1666
|
+
try:
|
|
1667
|
+
return int(value)
|
|
1668
|
+
except (TypeError, ValueError):
|
|
1669
|
+
return None
|
|
1670
|
+
|
|
1671
|
+
|
|
1635
1672
|
@dataclass(frozen=True)
|
|
1636
1673
|
class TickPlan:
|
|
1637
1674
|
"""Everything one tick decided, and nothing it has done yet."""
|
|
@@ -1090,6 +1090,104 @@ class ReviewerChoice:
|
|
|
1090
1090
|
rationale: str
|
|
1091
1091
|
|
|
1092
1092
|
|
|
1093
|
+
# #697: how far past a row's OWN needs-attention threshold a `pending`/
|
|
1094
|
+
# `running` row must sit before reviewer selection stops counting its machine
|
|
1095
|
+
# as busy. One hour of margin on top of a threshold that is itself measured
|
|
1096
|
+
# in tens of minutes: comfortably longer than any reap path needs
|
|
1097
|
+
# (`coord.reconcile._reconcile_no_agent_record` on the daemon's 30s tick,
|
|
1098
|
+
# `coord.diagnose.sweep_dead_running_rows` on `coord-notify.timer`'s 5min
|
|
1099
|
+
# cadence), so a row still counted busy here is one every reaper has already
|
|
1100
|
+
# had many chances at.
|
|
1101
|
+
STALE_BUSY_BUFFER_SECONDS = 3600.0
|
|
1102
|
+
|
|
1103
|
+
# The same horizon for rows whose type has NO wall-clock threshold at all —
|
|
1104
|
+
# `PipelineConfig.attention_threshold_for` returns `inf` for the attended
|
|
1105
|
+
# chat/troubleshoot/audit family (#1133). Those are exactly the rows #697
|
|
1106
|
+
# observed at 51h and 70h, so "never expires" is not an option here; a flat,
|
|
1107
|
+
# deliberately generous day is. A human really attending a chat session for
|
|
1108
|
+
# a full day is far rarer than a tmux session that died without being reaped.
|
|
1109
|
+
STALE_BUSY_INTERACTIVE_SECONDS = 24 * 3600.0
|
|
1110
|
+
|
|
1111
|
+
|
|
1112
|
+
def _is_stale_busy_row(a: Assignment, config: Config, now: float) -> bool:
|
|
1113
|
+
"""True when *a* is too old to still be believed as occupying its machine (#697).
|
|
1114
|
+
|
|
1115
|
+
Reviewer selection's ``busy`` set used to count **every** ``pending``/
|
|
1116
|
+
``running`` board row, which is how a zombie row broke dispatch in #697:
|
|
1117
|
+
rows whose worker had been dead for hours-to-days kept inflating the set,
|
|
1118
|
+
so real machines looked occupied and selection was pushed onto whatever
|
|
1119
|
+
candidate happened to look "free" — on #669 that was an *offline* machine,
|
|
1120
|
+
and the review could not be dispatched at all.
|
|
1121
|
+
|
|
1122
|
+
This is deliberately **not** a liveness probe, and deliberately **not** a
|
|
1123
|
+
reap. The reapers (``coord.reconcile._reconcile_no_agent_record``,
|
|
1124
|
+
``coord.interactive.reap_stale_interactive_sessions``,
|
|
1125
|
+
``coord.diagnose.sweep_dead_running_rows``) own the "is it actually dead?"
|
|
1126
|
+
question, they answer it with a positive disproof or a real tmux/agent
|
|
1127
|
+
probe, and they are the only things allowed to write a terminal status.
|
|
1128
|
+
Guessing from age alone would be #1870's mistake if it gated a *write*.
|
|
1129
|
+
|
|
1130
|
+
Here it gates only a *ranking*, where being wrong is cheap and
|
|
1131
|
+
self-correcting in both directions:
|
|
1132
|
+
|
|
1133
|
+
* Wrong about a genuinely-live row → its machine is ranked as idle and may
|
|
1134
|
+
receive the review. That is the SAME outcome fallback 1
|
|
1135
|
+
("different machine, currently busy — review will queue") already
|
|
1136
|
+
produces on a one-other-machine fleet, and a genuinely-saturated agent
|
|
1137
|
+
answers with a rejection that ``_ranked_reviewer_candidates`` already
|
|
1138
|
+
falls through on (#904).
|
|
1139
|
+
* Wrong about a dead row (age not yet reached) → status quo ante: the
|
|
1140
|
+
machine stays "busy" and merely ranks lower.
|
|
1141
|
+
|
|
1142
|
+
A row with no ``dispatched_at`` is never stale — there is nothing to
|
|
1143
|
+
compute an age from, and this path never guesses, mirroring
|
|
1144
|
+
``sweep_dead_running_rows``.
|
|
1145
|
+
"""
|
|
1146
|
+
dispatched_at = getattr(a, "dispatched_at", None)
|
|
1147
|
+
if not dispatched_at:
|
|
1148
|
+
return False
|
|
1149
|
+
try:
|
|
1150
|
+
dispatched = float(dispatched_at)
|
|
1151
|
+
except (TypeError, ValueError):
|
|
1152
|
+
return False
|
|
1153
|
+
|
|
1154
|
+
threshold = config.pipeline.attention_threshold_for(
|
|
1155
|
+
a.type or "work",
|
|
1156
|
+
provider_name=a.provider_name,
|
|
1157
|
+
review_of_assignment_id=a.review_of_assignment_id,
|
|
1158
|
+
)
|
|
1159
|
+
if threshold == float("inf"):
|
|
1160
|
+
horizon = STALE_BUSY_INTERACTIVE_SECONDS
|
|
1161
|
+
else:
|
|
1162
|
+
horizon = threshold + STALE_BUSY_BUFFER_SECONDS
|
|
1163
|
+
return (now - dispatched) > horizon
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
def busy_machine_names(
|
|
1167
|
+
board: Board,
|
|
1168
|
+
config: Config,
|
|
1169
|
+
*,
|
|
1170
|
+
now: float | None = None,
|
|
1171
|
+
) -> set[str]:
|
|
1172
|
+
"""Machines with at least one *believable* in-flight row (#697).
|
|
1173
|
+
|
|
1174
|
+
The shared ``busy`` set for :func:`pick_reviewer_machine` and
|
|
1175
|
+
:func:`_ranked_reviewer_candidates` — a ``pending``/``running`` row whose
|
|
1176
|
+
age is past :func:`_is_stale_busy_row`'s horizon is presumed dead and no
|
|
1177
|
+
longer holds its machine down. See that function for why an age-only
|
|
1178
|
+
heuristic is the right instrument *for a ranking* and the wrong one for a
|
|
1179
|
+
reap.
|
|
1180
|
+
"""
|
|
1181
|
+
if now is None:
|
|
1182
|
+
now = time.time()
|
|
1183
|
+
return {
|
|
1184
|
+
a.machine_name
|
|
1185
|
+
for a in board.active
|
|
1186
|
+
if a.status in ("pending", "running")
|
|
1187
|
+
and not _is_stale_busy_row(a, config, now)
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
|
|
1093
1191
|
def pick_reviewer_machine(
|
|
1094
1192
|
worker_machine_name: str,
|
|
1095
1193
|
repo_name: str,
|
|
@@ -1111,6 +1209,11 @@ def pick_reviewer_machine(
|
|
|
1111
1209
|
cordon blocked the review, the unreviewable entry stayed `running`, the
|
|
1112
1210
|
running entry deferred the roll, and the deferred roll left the cordon
|
|
1113
1211
|
up. Explicit pauses and quiet hours still apply.
|
|
1212
|
+
|
|
1213
|
+
#697: the ``busy`` set is :func:`busy_machine_names`, which drops
|
|
1214
|
+
``pending``/``running`` rows too old to still be believed — a zombie row
|
|
1215
|
+
used to make a real machine look occupied indefinitely and push selection
|
|
1216
|
+
onto an offline "free" candidate.
|
|
1114
1217
|
"""
|
|
1115
1218
|
from coord.machine_pause import follow_on_paused_set
|
|
1116
1219
|
paused = follow_on_paused_set(config.machines)
|
|
@@ -1121,7 +1224,7 @@ def pick_reviewer_machine(
|
|
|
1121
1224
|
if not candidates:
|
|
1122
1225
|
return None
|
|
1123
1226
|
|
|
1124
|
-
busy =
|
|
1227
|
+
busy = busy_machine_names(board, config)
|
|
1125
1228
|
|
|
1126
1229
|
different = [
|
|
1127
1230
|
m for m in candidates
|
|
@@ -1191,6 +1294,9 @@ def _ranked_reviewer_candidates(
|
|
|
1191
1294
|
literal "no eligible reviewer machine configured for repo
|
|
1192
1295
|
'claude-coordinator'" that a cordoned fleet answered every review
|
|
1193
1296
|
dispatch with for 70 minutes.
|
|
1297
|
+
|
|
1298
|
+
#697: shares :func:`busy_machine_names` with ``pick_reviewer_machine``, so
|
|
1299
|
+
tier 1 vs tier 2 here is decided on *believable* in-flight rows only.
|
|
1194
1300
|
"""
|
|
1195
1301
|
from coord.machine_pause import follow_on_paused_set # noqa: PLC0415
|
|
1196
1302
|
|
|
@@ -1202,7 +1308,7 @@ def _ranked_reviewer_candidates(
|
|
|
1202
1308
|
if not candidates:
|
|
1203
1309
|
return []
|
|
1204
1310
|
|
|
1205
|
-
busy =
|
|
1311
|
+
busy = busy_machine_names(board, config)
|
|
1206
1312
|
|
|
1207
1313
|
result: list[tuple[Machine, bool]] = []
|
|
1208
1314
|
for m in candidates:
|
|
@@ -459,6 +459,37 @@ def test_a_busy_daemon_host_defers_the_whole_run(
|
|
|
459
459
|
assert pending.reason == "propagate"
|
|
460
460
|
|
|
461
461
|
|
|
462
|
+
def test_a_busy_daemon_deferral_stamps_this_runs_own_threshold_onto_the_marker(
|
|
463
|
+
valid_config_path, state_dir, no_network, monkeypatch
|
|
464
|
+
):
|
|
465
|
+
"""#2870: the marker `_ensure_roll_pending_marker` arms here must carry
|
|
466
|
+
THIS run's own already-passed `--min-behind`/`propagation.
|
|
467
|
+
min_releases_behind` threshold (`RollPending.min_releases_behind`) — so
|
|
468
|
+
whatever eventually discharges it (`coord release nightly-window`'s
|
|
469
|
+
belt-and-braces `coord release propagate` call, or the drive-queue
|
|
470
|
+
tick's spawned `coord-release-window.service`) is gated at the SAME
|
|
471
|
+
threshold that armed it, not a threshold re-resolved from scratch."""
|
|
472
|
+
monkeypatch.setattr(
|
|
473
|
+
release_cmd, "_fetch_board",
|
|
474
|
+
lambda: ({"assignments": [{"machine_name": "server", "issue_number": 9,
|
|
475
|
+
"status": "RUNNING"}]}, None),
|
|
476
|
+
)
|
|
477
|
+
monkeypatch.setattr(
|
|
478
|
+
release_cmd, "_releases_behind_count", lambda *a, **k: (7, None),
|
|
479
|
+
)
|
|
480
|
+
_stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
481
|
+
daemon="server")
|
|
482
|
+
result = CliRunner().invoke(
|
|
483
|
+
main,
|
|
484
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
485
|
+
"--target", "0.4.111", "--min-behind", "5"],
|
|
486
|
+
)
|
|
487
|
+
assert result.exit_code == 0, result.output
|
|
488
|
+
pending = dq_cmd.read_roll_pending()
|
|
489
|
+
assert pending is not None
|
|
490
|
+
assert pending.min_releases_behind == 5
|
|
491
|
+
|
|
492
|
+
|
|
462
493
|
def test_a_busy_daemon_dry_run_defers_without_writing_the_marker(
|
|
463
494
|
valid_config_path, state_dir, no_network, monkeypatch
|
|
464
495
|
):
|