code-coordinator 0.5.268__tar.gz → 0.5.269__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.269}/PKG-INFO +1 -1
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/drive_queue.py +113 -9
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/release.py +71 -5
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/drive_queue.py +37 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_release_propagate.py +31 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_release_window.py +53 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_propagate_threshold.py +56 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_roll_window_handoff.py +93 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/.gitignore +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/CLAUDE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/GOAL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/LICENSE +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/MANIFEST.in +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/README.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/agent.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/block_log.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/board_service.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/brain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/claim.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/client.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/comments.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/dao.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/db.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/deps.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/drive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/events.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/filelock.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/freshness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/gates.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/goal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/context.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/models.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/render.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/health/units.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/hooks.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/interactive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/models.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/network.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/notify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/openapi.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/parentage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/plans.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/progress.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/release_window.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/reports.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/review.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/self_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/smoke.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/split_work.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/sql.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/test_author.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/test_report.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/usage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/install-agent.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/pyproject.toml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/setup.cfg +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/__init__.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/conftest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_db.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_events.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_init.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_models.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_network.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_review.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_session.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_split.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_state.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/types/generated.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.268 → code_coordinator-0.5.269}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -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."""
|
|
@@ -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
|
):
|
|
@@ -426,6 +426,59 @@ def test_a_marker_pending_for_the_same_target_is_fired_and_cleared_on_success(
|
|
|
426
426
|
assert not escalations
|
|
427
427
|
|
|
428
428
|
|
|
429
|
+
def test_a_marker_pending_for_the_same_target_discharges_at_its_own_arm_threshold(
|
|
430
|
+
valid_config_path, state_dir, no_network, escalations, monkeypatch
|
|
431
|
+
):
|
|
432
|
+
"""#2870: the belt-and-braces `coord release propagate` call this
|
|
433
|
+
command makes for an existing marker must be gated at the threshold the
|
|
434
|
+
marker was ARMED at (`RollPending.min_releases_behind`), never at
|
|
435
|
+
whatever `propagation.min_releases_behind` (or this run's OWN
|
|
436
|
+
`--min-behind`) happens to resolve to. Before #2870 this kwarg was never
|
|
437
|
+
passed at all, so a marker armed via `--min-behind 1` against a fleet
|
|
438
|
+
configured `min_releases_behind: 5` could never discharge — every
|
|
439
|
+
belt-and-braces attempt (and every tick-fired `coord-release-window.
|
|
440
|
+
service` re-entry) re-resolved the fleet default and held forever."""
|
|
441
|
+
_stub_verify(monkeypatch, daemon_version="0.5.30")
|
|
442
|
+
prop_calls = _stub_propagate(monkeypatch, status=rp.STATUS_VERIFIED, exit_code=0)
|
|
443
|
+
# Armed at threshold 7 (e.g. by a prior `--min-behind 7` run) — a value
|
|
444
|
+
# deliberately unreachable by THIS run's own resolution (no `--min-behind`
|
|
445
|
+
# / no `propagation:` block here, so it defaults to 1), proving the
|
|
446
|
+
# marker's own threshold is what's threaded through, not this run's.
|
|
447
|
+
dq_cmd.write_roll_pending(_pending(target_version="0.5.31", min_releases_behind=7))
|
|
448
|
+
|
|
449
|
+
result = CliRunner().invoke(
|
|
450
|
+
main,
|
|
451
|
+
["release", "nightly-window", "--config", str(valid_config_path),
|
|
452
|
+
"--target", "0.5.31", "--daemon-host", "server"],
|
|
453
|
+
)
|
|
454
|
+
assert result.exit_code == 0, result.output
|
|
455
|
+
assert len(prop_calls) == 1
|
|
456
|
+
assert prop_calls[0]["min_behind"] == 7 # the marker's own arm threshold, not 1
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
def test_a_marker_with_no_recorded_threshold_falls_back_to_this_runs_own(
|
|
460
|
+
valid_config_path, state_dir, no_network, escalations, monkeypatch
|
|
461
|
+
):
|
|
462
|
+
"""A marker written before #2870 (or whose arming run never evaluated
|
|
463
|
+
the #2583 gate at all) carries no `min_releases_behind` — the discharge
|
|
464
|
+
call falls back to THIS run's own effective threshold, exactly the
|
|
465
|
+
pre-#2870 behaviour, rather than guessing or omitting the flag."""
|
|
466
|
+
_stub_verify(monkeypatch, daemon_version="0.5.30")
|
|
467
|
+
prop_calls = _stub_propagate(monkeypatch, status=rp.STATUS_VERIFIED, exit_code=0)
|
|
468
|
+
dq_cmd.write_roll_pending(_pending(target_version="0.5.31", min_releases_behind=None))
|
|
469
|
+
|
|
470
|
+
result = CliRunner().invoke(
|
|
471
|
+
main,
|
|
472
|
+
["release", "nightly-window", "--config", str(valid_config_path),
|
|
473
|
+
"--target", "0.5.31", "--daemon-host", "server"],
|
|
474
|
+
)
|
|
475
|
+
assert result.exit_code == 0, result.output
|
|
476
|
+
assert len(prop_calls) == 1
|
|
477
|
+
# No `--min-behind` and no `propagation:` block on THIS run -> defaults
|
|
478
|
+
# to 1, exactly as `_resolve_min_behind` always has.
|
|
479
|
+
assert prop_calls[0]["min_behind"] == 1
|
|
480
|
+
|
|
481
|
+
|
|
429
482
|
def test_a_marker_pending_for_the_same_target_up_to_date_race_clears_it_too(
|
|
430
483
|
valid_config_path, state_dir, no_network, monkeypatch
|
|
431
484
|
):
|
{code_coordinator-0.5.268 → code_coordinator-0.5.269}/tests/test_release_propagate_threshold.py
RENAMED
|
@@ -487,3 +487,59 @@ def test_window_at_threshold_sets_the_marker_exactly_as_before(
|
|
|
487
487
|
assert record["status"] == rw.STATUS_ROLL_PENDING
|
|
488
488
|
assert record["releases_behind"] == 10
|
|
489
489
|
assert record["min_releases_behind"] == 10
|
|
490
|
+
# #2870: the marker itself carries the threshold it was armed at.
|
|
491
|
+
assert pending.min_releases_behind == 10
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
def test_2870_a_marker_armed_below_the_fleet_default_still_discharges_at_its_own_threshold(
|
|
495
|
+
tmp_path, state_dir, no_network, monkeypatch
|
|
496
|
+
):
|
|
497
|
+
"""#2870's own regression test: `nightly-window --min-behind 1` against a
|
|
498
|
+
fleet configured `min_releases_behind: 5` must not produce a marker that
|
|
499
|
+
can never clear. Before the fix, the marker carried no threshold at all,
|
|
500
|
+
so every discharge attempt (this command's own belt-and-braces `coord
|
|
501
|
+
release propagate` call, and every re-entry the drive-queue tick fires
|
|
502
|
+
via `coord-release-window.service`) re-resolved the fleet default (5)
|
|
503
|
+
and held forever at "N behind, threshold 5" — exactly the 2026-08-28
|
|
504
|
+
incident (`v0.5.259`/`v0.5.260`, held ~40 minutes with two machines
|
|
505
|
+
idle, `alert: (none)` throughout)."""
|
|
506
|
+
config_path = tmp_path / "coordinator.yml"
|
|
507
|
+
config_path.write_text(VALID_CONFIG + "\npropagation:\n min_releases_behind: 5\n")
|
|
508
|
+
|
|
509
|
+
# ── night 1: armed at --min-behind 1, well below the fleet default.
|
|
510
|
+
_stub_behind(monkeypatch, behind=1)
|
|
511
|
+
_stub_window_verify(monkeypatch, daemon_version="0.4.100")
|
|
512
|
+
arm = CliRunner().invoke(
|
|
513
|
+
main,
|
|
514
|
+
["release", "nightly-window", "--config", str(config_path),
|
|
515
|
+
"--target", "0.4.111", "--daemon-host", "server", "--min-behind", "1"],
|
|
516
|
+
)
|
|
517
|
+
assert arm.exit_code == 0, arm.output
|
|
518
|
+
armed = dq_cmd.read_roll_pending()
|
|
519
|
+
assert armed is not None
|
|
520
|
+
assert armed.min_releases_behind == 1 # NOT the fleet default of 5
|
|
521
|
+
|
|
522
|
+
# ── night 2 (or the tick's own `coord-release-window.service` re-entry —
|
|
523
|
+
# that unit's ExecStart carries the SAME operator-added `--min-behind
|
|
524
|
+
# 1` every time it runs, exactly like `coord-release-window.service`
|
|
525
|
+
# in the issue's own evidence section): same marker, same target.
|
|
526
|
+
# Before #2870, the belt-and-braces `coord release propagate` call
|
|
527
|
+
# never passed `--min-behind` AT ALL regardless of what this run's own
|
|
528
|
+
# gate resolved, so the real subprocess fell back to the fleet default
|
|
529
|
+
# (5) and held. After the fix it is gated at the marker's own arm
|
|
530
|
+
# threshold (1).
|
|
531
|
+
prop_calls = _stub_propagate(monkeypatch, status=rp.STATUS_VERIFIED, exit_code=0)
|
|
532
|
+
fire = CliRunner().invoke(
|
|
533
|
+
main,
|
|
534
|
+
["release", "nightly-window", "--config", str(config_path),
|
|
535
|
+
"--target", "0.4.111", "--daemon-host", "server", "--min-behind", "1"],
|
|
536
|
+
)
|
|
537
|
+
assert fire.exit_code == 0, fire.output
|
|
538
|
+
assert len(prop_calls) == 1
|
|
539
|
+
assert prop_calls[0]["min_behind"] == 1, (
|
|
540
|
+
"the discharge call re-resolved the fleet default instead of the "
|
|
541
|
+
"marker's own arm threshold — this is the exact #2870 freeze"
|
|
542
|
+
)
|
|
543
|
+
# And the marker actually clears — it does not survive the next
|
|
544
|
+
# propagate the way it did in the incident.
|
|
545
|
+
assert dq_cmd.read_roll_pending() is None
|