code-coordinator 0.5.497__tar.gz → 0.5.498__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.497 → code_coordinator-0.5.498}/PKG-INFO +1 -1
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/release.py +55 -3
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/release_propagate.py +49 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_release_propagate.py +148 -2
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_propagate.py +62 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/.gitignore +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/CLAUDE.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/GOAL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/LICENSE +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/MANIFEST.in +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/README.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/__init__.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/agent.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/audit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/backup.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/block_log.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/board_service.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/brain.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/claim.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/cli.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/client.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/codegen.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/comments.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/config.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dao.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/db.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/deps.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/drive.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/events.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/filelock.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/freshness.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/gates.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/goal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/context.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/models.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/render.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/health/units.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/hooks.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/interactive.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/models.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/network.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/notify.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/openapi.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/parentage.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/plans.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/progress.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/release_window.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/reports.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/review.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/self_health.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/smoke.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/split_work.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/sql.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/state.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/test_author.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/test_report.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/usage.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/install-agent.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/pyproject.toml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/setup.cfg +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/__init__.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/backends.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/conftest.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_client.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_config.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_db.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_events.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_init.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_models.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_network.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_review.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_session.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_split.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_state.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.497 → code_coordinator-0.5.498}/tests/write_parity.py +0 -0
|
@@ -1722,8 +1722,32 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
1722
1722
|
# never touched would undo somebody else's deliberate state.
|
|
1723
1723
|
from coord.agent_update import cli_initiator # noqa: PLC0415
|
|
1724
1724
|
|
|
1725
|
+
# #3364: narrow further, to the hosts the RED GATE ITSELF names.
|
|
1726
|
+
# `--rollback-on-red` used to revert every host this run updated
|
|
1727
|
+
# the moment ANY of them went red — four hosts that rolled and
|
|
1728
|
+
# verified clean, reverted because a fifth could not roll at all.
|
|
1729
|
+
# A host that rolled and verified is not part of the failure just
|
|
1730
|
+
# because a sibling host's roll was; partial fleet convergence is
|
|
1731
|
+
# strictly better than reverting everyone plus the fifth's own
|
|
1732
|
+
# damage. `blocking_hosts` is `None` when the gate cannot attribute
|
|
1733
|
+
# to specific hosts (a fleet-wide finding) — that must fail toward
|
|
1734
|
+
# rolling back every updated host, the previous (safe) behavior,
|
|
1735
|
+
# never toward rolling back none of them.
|
|
1736
|
+
implicated = gate.blocking_hosts
|
|
1737
|
+
targets = (
|
|
1738
|
+
updated_hosts if implicated is None
|
|
1739
|
+
else [h for h in updated_hosts if h in implicated]
|
|
1740
|
+
)
|
|
1741
|
+
spared = [h for h in updated_hosts if h not in targets]
|
|
1742
|
+
if spared:
|
|
1743
|
+
record.spared_rollback = spared
|
|
1744
|
+
_out(
|
|
1745
|
+
" spared (rolled and verified, not named by the red gate): "
|
|
1746
|
+
+ ", ".join(spared)
|
|
1747
|
+
)
|
|
1748
|
+
|
|
1725
1749
|
down: list[str] = []
|
|
1726
|
-
for host in
|
|
1750
|
+
for host in targets:
|
|
1727
1751
|
machine = by_name.get(host)
|
|
1728
1752
|
if machine is None:
|
|
1729
1753
|
continue
|
|
@@ -2948,6 +2972,20 @@ def _rollback_host(
|
|
|
2948
2972
|
take under systemd), and only then gives up — loudly, naming the host as
|
|
2949
2973
|
DOWN rather than reporting a tidy "rolling back".
|
|
2950
2974
|
|
|
2975
|
+
#3364: the agent answering ``/health`` again is not the end of the job
|
|
2976
|
+
either. ``POST /rollback`` (``agent_app.py``'s ``rollback`` handler)
|
|
2977
|
+
flips ``~/.coord-venv`` back and re-execs the AGENT — and, same gap
|
|
2978
|
+
#2069 closed for the forward ``/update`` path, nothing about that
|
|
2979
|
+
restarts ``coord-serve``/``coord-web``/``coord-drive-queue``. Left as
|
|
2980
|
+
they were, those siblings keep running out of the slot the rollback
|
|
2981
|
+
just deactivated — permanently orphaned on the slot the next ``/update``
|
|
2982
|
+
must delete and rebuild, which is exactly the #2121 occupied-slot
|
|
2983
|
+
deadlock this issue is about. So a confirmed agent restart here also
|
|
2984
|
+
triggers the same ``_restart_sibling_services`` call `_roll_python` uses,
|
|
2985
|
+
and a sibling that fails to come back on the reverted slot fails this
|
|
2986
|
+
rollback's own verdict — "the venv flipped back" is not "the host is
|
|
2987
|
+
back", same reasoning as #2095 for the forward roll.
|
|
2988
|
+
|
|
2951
2989
|
#2121: *initiator* names this call on the target host's audit trail, the
|
|
2952
2990
|
same as ``_roll_python``'s own ``/update`` POST a few lines up — both are
|
|
2953
2991
|
automation that fires during a fleet roll with nobody at a keyboard, so
|
|
@@ -2968,9 +3006,23 @@ def _rollback_host(
|
|
|
2968
3006
|
if status != 202:
|
|
2969
3007
|
return False, str(body.get("error") or f"HTTP {status}")
|
|
2970
3008
|
|
|
3009
|
+
def _back_on_target(note: str) -> tuple[bool, str]:
|
|
3010
|
+
"""The agent answered ``/health`` on the reverted slot — re-home the
|
|
3011
|
+
siblings onto it too (#3364) before this counts as done."""
|
|
3012
|
+
sib_ok, sib_detail, _sib_failed = _restart_sibling_services(
|
|
3013
|
+
machine, agent_port=agent_port
|
|
3014
|
+
)
|
|
3015
|
+
if sib_ok is False:
|
|
3016
|
+
return False, f"{note}, but {sib_detail}"
|
|
3017
|
+
# True (nothing failed) and None (this agent predates
|
|
3018
|
+
# /restart-services — no channel to have restarted anything
|
|
3019
|
+
# through) both still count as a rollback success: neither is a
|
|
3020
|
+
# service THIS call took down.
|
|
3021
|
+
return True, f"{note}; {sib_detail}"
|
|
3022
|
+
|
|
2971
3023
|
back, version = _wait_agent_back(machine, agent_port=agent_port, timeout=timeout)
|
|
2972
3024
|
if back:
|
|
2973
|
-
return
|
|
3025
|
+
return _back_on_target(f"rolled back; agent is serving again on v{version}")
|
|
2974
3026
|
|
|
2975
3027
|
# The re-exec did not take. This is the documented systemd stall, and it
|
|
2976
3028
|
# has a documented fix — apply it rather than handing the operator a
|
|
@@ -2981,7 +3033,7 @@ def _rollback_host(
|
|
|
2981
3033
|
machine, agent_port=agent_port, timeout=min(timeout, 60.0)
|
|
2982
3034
|
)
|
|
2983
3035
|
if back:
|
|
2984
|
-
return
|
|
3036
|
+
return _back_on_target(
|
|
2985
3037
|
f"rolled back; agent needed an SSH `systemctl --user restart "
|
|
2986
3038
|
f"coord-agent` but is serving again on v{version}"
|
|
2987
3039
|
)
|
|
@@ -419,6 +419,14 @@ OUT_OF_REACH_LANES: frozenset[str] = frozenset({"~/.coord-cli-venv", "webapp bun
|
|
|
419
419
|
#: for a lane, and the only form a grouped finding names its lanes by.
|
|
420
420
|
_LANE_LABEL = re.compile(r"^(?P<lane>.+?)\s+\((?P<host>[^()]+)\)$")
|
|
421
421
|
|
|
422
|
+
#: The pseudo-host ``coord/release_verify.py``'s ``verify()`` stamps on a
|
|
423
|
+
#: finding it cannot pin to one machine (a fleet-wide version-skew or
|
|
424
|
+
#: no-data finding — every ``host="(fleet)"`` call there). Named here so
|
|
425
|
+
#: :attr:`GateVerdict.blocking_hosts` recognises it as "not a real host" the
|
|
426
|
+
#: same way :func:`lane_is_out_of_reach`'s allow-list keeps a lane's gaps
|
|
427
|
+
#: explicit rather than inferred.
|
|
428
|
+
_UNATTRIBUTABLE_HOST = "(fleet)"
|
|
429
|
+
|
|
422
430
|
|
|
423
431
|
def parse_lane_label(label: str) -> tuple[str, str] | None:
|
|
424
432
|
"""``"~/.coord-venv (precision)"`` -> ``("precision", "~/.coord-venv")``.
|
|
@@ -487,6 +495,36 @@ class GateVerdict:
|
|
|
487
495
|
def red(self) -> bool:
|
|
488
496
|
return self.severity == "crit"
|
|
489
497
|
|
|
498
|
+
@property
|
|
499
|
+
def blocking_hosts(self) -> frozenset[str] | None:
|
|
500
|
+
"""Real hosts a BLOCKING finding actually names (#3364).
|
|
501
|
+
|
|
502
|
+
``--rollback-on-red`` used to revert every host a run updated the
|
|
503
|
+
instant ANY of them went red — a fifth host's failure rolling back
|
|
504
|
+
four that verified clean. This is what lets a caller narrow to just
|
|
505
|
+
the hosts the red gate is actually about, the same way
|
|
506
|
+
:func:`attempted_scope` already narrows which lanes count.
|
|
507
|
+
|
|
508
|
+
``None`` means "could not attribute to specific hosts" — a
|
|
509
|
+
fleet-wide finding like the no-``--expected``-given skew case
|
|
510
|
+
(``host="(fleet)"``, see ``coord/release_verify.py``'s ``verify()``)
|
|
511
|
+
or a finding with no host at all. A caller must fail toward that
|
|
512
|
+
meaning "implicates everyone this run touched", never toward
|
|
513
|
+
"implicates nobody" — the same "an unattributable signal blocks
|
|
514
|
+
every host, never none of them" rule :attr:`Quiescence.
|
|
515
|
+
fleet_wide_busy` already follows for busy signals. A concrete
|
|
516
|
+
(possibly empty, when there are no blocking findings at all) set
|
|
517
|
+
means every blocking finding named a real host, and rollback may
|
|
518
|
+
scope to exactly those.
|
|
519
|
+
"""
|
|
520
|
+
hosts: set[str] = set()
|
|
521
|
+
for finding in self.blocking:
|
|
522
|
+
for host, _lane in _finding_pairs(finding):
|
|
523
|
+
if not host or host == _UNATTRIBUTABLE_HOST:
|
|
524
|
+
return None
|
|
525
|
+
hosts.add(host)
|
|
526
|
+
return frozenset(hosts)
|
|
527
|
+
|
|
490
528
|
def to_dict(self) -> dict:
|
|
491
529
|
return {
|
|
492
530
|
"severity": self.severity,
|
|
@@ -1485,6 +1523,12 @@ class PropagationRecord:
|
|
|
1485
1523
|
#: done so, or the resulting quiet fleet is indistinguishable from #2082.
|
|
1486
1524
|
cordons: dict = field(default_factory=dict)
|
|
1487
1525
|
rolled_back: list[str] = field(default_factory=list)
|
|
1526
|
+
#: #3364: hosts this run updated and verified clean but did NOT roll back
|
|
1527
|
+
#: even though the gate went red — because the red gate's blocking
|
|
1528
|
+
#: findings (:attr:`GateVerdict.blocking_hosts`) named some OTHER host,
|
|
1529
|
+
#: not this one. A host that rolled and verified is not part of the
|
|
1530
|
+
#: failure just because a sibling host's roll was.
|
|
1531
|
+
spared_rollback: list[str] = field(default_factory=list)
|
|
1488
1532
|
released_holds: list[str] = field(default_factory=list)
|
|
1489
1533
|
#: #2583: the min-releases-behind gate's own readings for this run —
|
|
1490
1534
|
#: ``min_releases_behind`` is whatever this run resolved (flag > config >
|
|
@@ -1763,6 +1807,11 @@ def render_record(record: PropagationRecord | Mapping[str, Any]) -> list[str]:
|
|
|
1763
1807
|
|
|
1764
1808
|
if data.get("rolled_back"):
|
|
1765
1809
|
lines.append(f" rolled back: {', '.join(data['rolled_back'])}")
|
|
1810
|
+
if data.get("spared_rollback"):
|
|
1811
|
+
lines.append(
|
|
1812
|
+
" spared (rolled and verified, not named by the red gate): "
|
|
1813
|
+
+ ", ".join(data["spared_rollback"])
|
|
1814
|
+
)
|
|
1766
1815
|
if data.get("released_holds"):
|
|
1767
1816
|
lines.append(f" released deploy gates: {', '.join(data['released_holds'])}")
|
|
1768
1817
|
if data.get("error"):
|
|
@@ -1170,6 +1170,77 @@ def test_a_host_whose_python_lane_failed_is_not_rolled_back(valid_config_path,
|
|
|
1170
1170
|
assert rolled_back == []
|
|
1171
1171
|
|
|
1172
1172
|
|
|
1173
|
+
def test_a_red_gate_naming_one_host_spares_the_others(valid_config_path, state_dir,
|
|
1174
|
+
no_network, monkeypatch):
|
|
1175
|
+
"""#3364: `--rollback-on-red` used to revert every host this run updated
|
|
1176
|
+
the instant ANY of them went red — four hosts that rolled and verified
|
|
1177
|
+
clean, reverted because a fifth could not roll at all. A host that
|
|
1178
|
+
rolled and verified is not part of the failure just because a sibling
|
|
1179
|
+
host's roll was; partial fleet convergence beats reverting everyone and
|
|
1180
|
+
re-orphaning a daemon host's serve/web for nothing."""
|
|
1181
|
+
from coord import release_verify as rv
|
|
1182
|
+
|
|
1183
|
+
_stub_lanes(monkeypatch)
|
|
1184
|
+
_stub_verify(
|
|
1185
|
+
monkeypatch,
|
|
1186
|
+
versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
1187
|
+
findings=[
|
|
1188
|
+
rv.Finding(severity="crit", host="laptop",
|
|
1189
|
+
lane="~/.coord-venv (laptop)", summary="stubbed"),
|
|
1190
|
+
],
|
|
1191
|
+
)
|
|
1192
|
+
rolled_back: list[str] = []
|
|
1193
|
+
monkeypatch.setattr(
|
|
1194
|
+
release_cmd, "_rollback_host",
|
|
1195
|
+
lambda machine, **k: (rolled_back.append(machine.name), (True, "rolling back"))[1],
|
|
1196
|
+
)
|
|
1197
|
+
result = CliRunner().invoke(
|
|
1198
|
+
main,
|
|
1199
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
1200
|
+
"--target", "0.4.111", "--daemon-host", "server"],
|
|
1201
|
+
)
|
|
1202
|
+
assert result.exit_code == 2, result.output
|
|
1203
|
+
assert rolled_back == ["laptop"], "server rolled and verified clean — it must be spared"
|
|
1204
|
+
record = _records(state_dir)[0]
|
|
1205
|
+
assert record["status"] == rp.STATUS_ROLLED_BACK
|
|
1206
|
+
assert record["spared_rollback"] == ["server"]
|
|
1207
|
+
assert "spared" in result.output
|
|
1208
|
+
|
|
1209
|
+
|
|
1210
|
+
def test_a_fleet_wide_finding_still_rolls_back_every_updated_host(
|
|
1211
|
+
valid_config_path, state_dir, no_network, monkeypatch
|
|
1212
|
+
):
|
|
1213
|
+
"""A finding `blocking_hosts` cannot attribute to a real host (`(fleet)`
|
|
1214
|
+
— no per-lane breakdown) must fail toward the old, safe behavior: roll
|
|
1215
|
+
back every host this run touched, not toward sparing everyone because
|
|
1216
|
+
nothing could be pinned down."""
|
|
1217
|
+
from coord import release_verify as rv
|
|
1218
|
+
|
|
1219
|
+
_stub_lanes(monkeypatch)
|
|
1220
|
+
_stub_verify(
|
|
1221
|
+
monkeypatch,
|
|
1222
|
+
versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
1223
|
+
findings=[
|
|
1224
|
+
rv.Finding(severity="crit", host="(fleet)", lane="(version skew)",
|
|
1225
|
+
summary="2 versions live across the fleet"),
|
|
1226
|
+
],
|
|
1227
|
+
)
|
|
1228
|
+
rolled_back: list[str] = []
|
|
1229
|
+
monkeypatch.setattr(
|
|
1230
|
+
release_cmd, "_rollback_host",
|
|
1231
|
+
lambda machine, **k: (rolled_back.append(machine.name), (True, "rolling back"))[1],
|
|
1232
|
+
)
|
|
1233
|
+
result = CliRunner().invoke(
|
|
1234
|
+
main,
|
|
1235
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
1236
|
+
"--target", "0.4.111", "--daemon-host", "server"],
|
|
1237
|
+
)
|
|
1238
|
+
assert result.exit_code == 2, result.output
|
|
1239
|
+
assert sorted(rolled_back) == ["laptop", "server"]
|
|
1240
|
+
record = _records(state_dir)[0]
|
|
1241
|
+
assert record["spared_rollback"] == []
|
|
1242
|
+
|
|
1243
|
+
|
|
1173
1244
|
def test_a_failed_daemon_python_roll_skips_other_hosts_python_lane(
|
|
1174
1245
|
valid_config_path, state_dir, no_network, monkeypatch
|
|
1175
1246
|
):
|
|
@@ -1362,6 +1433,12 @@ def test_release_rollback_hits_every_machine(valid_config_path, monkeypatch):
|
|
|
1362
1433
|
monkeypatch.setattr(release_cmd, "_post", _fake_post)
|
|
1363
1434
|
monkeypatch.setattr(release_cmd, "_get",
|
|
1364
1435
|
lambda url, *, timeout: (200, {"version": "0.4.110"}))
|
|
1436
|
+
# #3364: the sibling-restart call this test isn't about — assert it's
|
|
1437
|
+
# made in the dedicated `_rollback_host` tests below instead.
|
|
1438
|
+
monkeypatch.setattr(
|
|
1439
|
+
release_cmd, "_restart_sibling_services",
|
|
1440
|
+
lambda *a, **k: (True, "restarted coord-serve", {}),
|
|
1441
|
+
)
|
|
1365
1442
|
result = CliRunner().invoke(
|
|
1366
1443
|
main, ["release", "rollback", "--config", str(valid_config_path), "--yes"]
|
|
1367
1444
|
)
|
|
@@ -1414,6 +1491,10 @@ def test_a_rollback_rescued_by_the_ssh_restart_is_a_success(valid_config_path,
|
|
|
1414
1491
|
"coord.commands.agent_ops._escalate_restart",
|
|
1415
1492
|
lambda machine: revived.__setitem__("yes", True) or True,
|
|
1416
1493
|
)
|
|
1494
|
+
monkeypatch.setattr(
|
|
1495
|
+
release_cmd, "_restart_sibling_services",
|
|
1496
|
+
lambda *a, **k: (True, "restarted coord-serve", {}),
|
|
1497
|
+
)
|
|
1417
1498
|
result = CliRunner().invoke(
|
|
1418
1499
|
main, ["release", "rollback", "--config", str(valid_config_path), "--yes",
|
|
1419
1500
|
"--wait", "1"]
|
|
@@ -1737,7 +1818,14 @@ def test_a_stale_unit_advisory_names_the_units_remedy_not_agent_update(
|
|
|
1737
1818
|
|
|
1738
1819
|
def test_a_crit_on_a_lane_this_run_rolled_still_reverts(valid_config_path, state_dir,
|
|
1739
1820
|
no_network, monkeypatch):
|
|
1740
|
-
"""Scoping the gate is not removing it
|
|
1821
|
+
"""Scoping the gate is not removing it: a crit on `laptop`'s own
|
|
1822
|
+
python lane — a lane THIS run rolled — must still turn the gate red and
|
|
1823
|
+
trigger a rollback, never get waved through as advisory.
|
|
1824
|
+
|
|
1825
|
+
#3364: which HOST that rollback then touches is a separate, narrower
|
|
1826
|
+
question. The finding names only `laptop`, so only `laptop` — not
|
|
1827
|
+
`server`, which rolled and verified clean — gets rolled back; see
|
|
1828
|
+
`test_a_red_gate_naming_one_host_spares_the_others` for that half."""
|
|
1741
1829
|
from coord import release_verify as rv
|
|
1742
1830
|
|
|
1743
1831
|
_stub_lanes(monkeypatch)
|
|
@@ -1759,7 +1847,7 @@ def test_a_crit_on_a_lane_this_run_rolled_still_reverts(valid_config_path, state
|
|
|
1759
1847
|
"--target", "0.4.111", "--daemon-host", "server"],
|
|
1760
1848
|
)
|
|
1761
1849
|
assert result.exit_code == 2, result.output
|
|
1762
|
-
assert
|
|
1850
|
+
assert rolled_back == ["laptop"]
|
|
1763
1851
|
|
|
1764
1852
|
|
|
1765
1853
|
def test_the_remote_tui_lane_is_recorded_as_unrollable_not_failed(
|
|
@@ -2409,6 +2497,12 @@ def test_rollback_host_posts_the_caller_supplied_initiator(monkeypatch):
|
|
|
2409
2497
|
monkeypatch.setattr(
|
|
2410
2498
|
release_cmd, "_wait_agent_back", lambda *a, **k: (True, "0.4.110")
|
|
2411
2499
|
)
|
|
2500
|
+
# #3364: `_rollback_host` also restarts the daemon-host siblings once the
|
|
2501
|
+
# agent is back — not this test's concern, so stub it as clean.
|
|
2502
|
+
monkeypatch.setattr(
|
|
2503
|
+
release_cmd, "_restart_sibling_services",
|
|
2504
|
+
lambda *a, **k: (True, "restarted coord-serve", {}),
|
|
2505
|
+
)
|
|
2412
2506
|
|
|
2413
2507
|
ok, detail = release_cmd._rollback_host(
|
|
2414
2508
|
_machine(), agent_port=7433, timeout=5.0,
|
|
@@ -2438,6 +2532,10 @@ def test_rollback_host_without_an_initiator_omits_the_field(monkeypatch):
|
|
|
2438
2532
|
monkeypatch.setattr(
|
|
2439
2533
|
release_cmd, "_wait_agent_back", lambda *a, **k: (True, "0.4.110")
|
|
2440
2534
|
)
|
|
2535
|
+
monkeypatch.setattr(
|
|
2536
|
+
release_cmd, "_restart_sibling_services",
|
|
2537
|
+
lambda *a, **k: (True, "restarted coord-serve", {}),
|
|
2538
|
+
)
|
|
2441
2539
|
|
|
2442
2540
|
release_cmd._rollback_host(_machine(), agent_port=7433, timeout=5.0)
|
|
2443
2541
|
|
|
@@ -2445,6 +2543,54 @@ def test_rollback_host_without_an_initiator_omits_the_field(monkeypatch):
|
|
|
2445
2543
|
assert "initiator" not in payload
|
|
2446
2544
|
|
|
2447
2545
|
|
|
2546
|
+
def test_rollback_host_restarts_the_siblings_once_the_agent_is_back(monkeypatch):
|
|
2547
|
+
"""#3364's actual defect: `POST /rollback` (`agent_app.py`) flips the venv
|
|
2548
|
+
symlink and re-execs only the AGENT. Left there, `coord-serve`/
|
|
2549
|
+
`coord-web` keep running the slot the rollback just deactivated —
|
|
2550
|
+
permanently orphaned on the slot the next `/update` must delete and
|
|
2551
|
+
rebuild, the exact #2121 deadlock this issue reports. `_rollback_host`
|
|
2552
|
+
must therefore restart the siblings too, the same `_restart_sibling_
|
|
2553
|
+
services` call `_roll_python` makes for the forward roll."""
|
|
2554
|
+
monkeypatch.setattr(release_cmd, "_post", lambda *a, **k: (202, {}, ""))
|
|
2555
|
+
monkeypatch.setattr(
|
|
2556
|
+
release_cmd, "_wait_agent_back", lambda *a, **k: (True, "0.4.110")
|
|
2557
|
+
)
|
|
2558
|
+
calls: list[str] = []
|
|
2559
|
+
monkeypatch.setattr(
|
|
2560
|
+
release_cmd, "_restart_sibling_services",
|
|
2561
|
+
lambda machine, **k: (calls.append(machine.name), (True, "restarted coord-serve, coord-web", {}))[1],
|
|
2562
|
+
)
|
|
2563
|
+
|
|
2564
|
+
ok, detail = release_cmd._rollback_host(_machine(), agent_port=7433, timeout=5.0)
|
|
2565
|
+
|
|
2566
|
+
assert ok
|
|
2567
|
+
assert calls == ["server"], "the siblings must be restarted on the rolled-back host"
|
|
2568
|
+
assert "restarted coord-serve, coord-web" in detail
|
|
2569
|
+
|
|
2570
|
+
|
|
2571
|
+
def test_rollback_host_fails_when_a_sibling_stays_orphaned(monkeypatch):
|
|
2572
|
+
"""A sibling that fails to restart onto the reverted slot leaves the
|
|
2573
|
+
fleet in exactly the orphaned-slot shape #3364 describes — that is not a
|
|
2574
|
+
successful rollback, whatever the agent itself did."""
|
|
2575
|
+
monkeypatch.setattr(release_cmd, "_post", lambda *a, **k: (202, {}, ""))
|
|
2576
|
+
monkeypatch.setattr(
|
|
2577
|
+
release_cmd, "_wait_agent_back", lambda *a, **k: (True, "0.4.110")
|
|
2578
|
+
)
|
|
2579
|
+
monkeypatch.setattr(
|
|
2580
|
+
release_cmd, "_restart_sibling_services",
|
|
2581
|
+
lambda *a, **k: (
|
|
2582
|
+
False,
|
|
2583
|
+
"restarted coord-web; FAILED to restart: coord-serve (timed out)",
|
|
2584
|
+
{"coord-serve": "timed out"},
|
|
2585
|
+
),
|
|
2586
|
+
)
|
|
2587
|
+
|
|
2588
|
+
ok, detail = release_cmd._rollback_host(_machine(), agent_port=7433, timeout=5.0)
|
|
2589
|
+
|
|
2590
|
+
assert not ok, "a sibling orphaned on the reverted slot is not a success"
|
|
2591
|
+
assert "coord-serve" in detail
|
|
2592
|
+
|
|
2593
|
+
|
|
2448
2594
|
def test_release_propagate_red_gate_rollback_names_itself(
|
|
2449
2595
|
valid_config_path, state_dir, no_network, monkeypatch
|
|
2450
2596
|
):
|
|
@@ -1112,6 +1112,68 @@ def test_no_verification_at_all_is_not_a_pass_or_a_failure():
|
|
|
1112
1112
|
assert set(verdict.unrollable) == {"tui@precision", "tui@elitebook"}
|
|
1113
1113
|
|
|
1114
1114
|
|
|
1115
|
+
# ──────────────────────────────────────────────────────────────────────────
|
|
1116
|
+
# #3364: `--rollback-on-red` must scope to the hosts the red gate actually
|
|
1117
|
+
# names, not to every host the run happened to update
|
|
1118
|
+
# ──────────────────────────────────────────────────────────────────────────
|
|
1119
|
+
|
|
1120
|
+
|
|
1121
|
+
def test_blocking_hosts_names_only_the_host_a_finding_blames():
|
|
1122
|
+
"""A per-host crit finding (the common case: `coord release verify`
|
|
1123
|
+
stamping ``lane (host)`` for one offending machine) must scope
|
|
1124
|
+
`--rollback-on-red` to exactly that host — not every host this run
|
|
1125
|
+
updated. #3364's second defect was rolling back four clean hosts because
|
|
1126
|
+
a fifth went red."""
|
|
1127
|
+
verification = {
|
|
1128
|
+
"severity": "crit",
|
|
1129
|
+
"findings": [_finding("crit", "dellserver", "~/.coord-venv (dellserver)")],
|
|
1130
|
+
}
|
|
1131
|
+
verdict = rp.scope_verification(verification, lanes=_run_lanes())
|
|
1132
|
+
assert verdict.red
|
|
1133
|
+
assert verdict.blocking_hosts == frozenset({"dellserver"})
|
|
1134
|
+
|
|
1135
|
+
|
|
1136
|
+
def test_blocking_hosts_unions_a_grouped_finding():
|
|
1137
|
+
"""The grouped ``--expected`` mismatch names several real lanes at once
|
|
1138
|
+
(see `test_a_grouped_finding_blocks_when_ANY_lane_in_it_is_in_scope`) —
|
|
1139
|
+
`blocking_hosts` must pick every real host out of it, not just the first."""
|
|
1140
|
+
verification = {
|
|
1141
|
+
"severity": "crit",
|
|
1142
|
+
"findings": [
|
|
1143
|
+
_finding("crit", "elitebook, precision",
|
|
1144
|
+
"~/.coord-cli-venv (elitebook), ~/.coord-venv (precision)"),
|
|
1145
|
+
],
|
|
1146
|
+
}
|
|
1147
|
+
verdict = rp.scope_verification(verification, lanes=_run_lanes())
|
|
1148
|
+
assert verdict.red
|
|
1149
|
+
assert verdict.blocking_hosts == frozenset({"elitebook", "precision"})
|
|
1150
|
+
|
|
1151
|
+
|
|
1152
|
+
def test_blocking_hosts_is_none_for_a_fleet_wide_finding():
|
|
1153
|
+
"""A skew/no-data finding `coord release verify` cannot pin to one
|
|
1154
|
+
machine is stamped ``host="(fleet)"`` (see ``release_verify.verify``'s
|
|
1155
|
+
``"(version skew)"``/``"(expected version)"`` findings). `blocking_hosts`
|
|
1156
|
+
must read that as "cannot attribute" (``None``), not as a literal host
|
|
1157
|
+
named "(fleet)" — a caller must fail toward rolling back every host it
|
|
1158
|
+
touched, never toward a rollback that silently touches nobody."""
|
|
1159
|
+
verification = {
|
|
1160
|
+
"severity": "crit",
|
|
1161
|
+
"findings": [
|
|
1162
|
+
{"severity": "crit", "host": "(fleet)", "lane": "(version skew)",
|
|
1163
|
+
"summary": "2 versions live across the fleet", "detail": ""},
|
|
1164
|
+
],
|
|
1165
|
+
}
|
|
1166
|
+
verdict = rp.scope_verification(verification, lanes=_run_lanes())
|
|
1167
|
+
assert verdict.red
|
|
1168
|
+
assert verdict.blocking_hosts is None
|
|
1169
|
+
|
|
1170
|
+
|
|
1171
|
+
def test_blocking_hosts_is_empty_when_the_gate_is_clean():
|
|
1172
|
+
verdict = rp.scope_verification(None, lanes=_run_lanes())
|
|
1173
|
+
assert not verdict.red
|
|
1174
|
+
assert verdict.blocking_hosts == frozenset()
|
|
1175
|
+
|
|
1176
|
+
|
|
1115
1177
|
def test_the_gate_verdict_is_rendered_so_a_scoped_gate_is_never_invisible():
|
|
1116
1178
|
"""Scoping the gate is only safe if the scoping is legible afterwards —
|
|
1117
1179
|
a check that quietly stopped checking is the failure this whole module
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/requires.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
{code_coordinator-0.5.497 → code_coordinator-0.5.498}/code_coordinator.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|