code-coordinator 0.5.295__tar.gz → 0.5.297__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.295 → code_coordinator-0.5.297}/PKG-INFO +1 -1
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agent.py +59 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/drive_queue.py +69 -6
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/install-agent.sh +43 -5
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-test-runner.sh +20 -2
- code_coordinator-0.5.297/tests/test_coord_test_runner_acceptance_toolchain_2936.py +181 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue.py +99 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_env_venv_isolation.py +87 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/.gitignore +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/CLAUDE.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/GOAL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/LICENSE +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/MANIFEST.in +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/README.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/__init__.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/audit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/block_log.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/board_service.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/brain.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/claim.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/cli.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/client.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/comments.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/config.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dao.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/db.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/deps.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/drive.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/events.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/filelock.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/freshness.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/gates.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/goal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/context.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/models.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/render.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/health/units.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/hooks.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/interactive.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/models.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/network.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/notify.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/openapi.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/parentage.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/plans.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/progress.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/release_window.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/reports.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/review.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/self_health.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/smoke.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/split_work.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/sql.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/state.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/test_author.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/test_report.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/usage.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/pyproject.toml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/setup.cfg +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/__init__.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/backends.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/conftest.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_db.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_events.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_init.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_models.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_network.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_session.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_split.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_state.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tests/write_parity.py +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.295 → code_coordinator-0.5.297}/tui/tests/acceptance.rs +0 -0
|
@@ -508,6 +508,7 @@ tests/test_conflict_fix.py
|
|
|
508
508
|
tests/test_conflict_fix_semantic.py
|
|
509
509
|
tests/test_coord_log_daemon_fallback_2547.py
|
|
510
510
|
tests/test_coord_test.py
|
|
511
|
+
tests/test_coord_test_runner_acceptance_toolchain_2936.py
|
|
511
512
|
tests/test_coord_test_runner_baseline.py
|
|
512
513
|
tests/test_coord_test_runner_populated_home.py
|
|
513
514
|
tests/test_coord_test_runner_routing.py
|
{code_coordinator-0.5.295 → code_coordinator-0.5.297}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -534,6 +534,7 @@
|
|
|
534
534
|
"tests/test_conflict_fix_semantic.py",
|
|
535
535
|
"tests/test_coord_log_daemon_fallback_2547.py",
|
|
536
536
|
"tests/test_coord_test.py",
|
|
537
|
+
"tests/test_coord_test_runner_acceptance_toolchain_2936.py",
|
|
537
538
|
"tests/test_coord_test_runner_baseline.py",
|
|
538
539
|
"tests/test_coord_test_runner_populated_home.py",
|
|
539
540
|
"tests/test_coord_test_runner_routing.py",
|
|
@@ -1742,6 +1742,53 @@ def _worker_subprocess_env(
|
|
|
1742
1742
|
return env
|
|
1743
1743
|
|
|
1744
1744
|
|
|
1745
|
+
def worker_coord_reachable(base_env: dict[str, str] | None = None) -> tuple[bool, str]:
|
|
1746
|
+
"""#2936: does ``coord`` resolve on a WORKER's PATH — not this agent
|
|
1747
|
+
process's own?
|
|
1748
|
+
|
|
1749
|
+
Built on the exact env a real worker is spawned into
|
|
1750
|
+
(:func:`_worker_subprocess_env`, whose #402/#2569 strip removes the
|
|
1751
|
+
fleet's pinned ``~/.coord-venv/bin`` from PATH). A worker that cannot
|
|
1752
|
+
resolve ``coord`` can run its entire suite, PASS, and be structurally
|
|
1753
|
+
unable to record that verdict (``coord test <id> --passed``) — the
|
|
1754
|
+
missing verdict then reads as a TEST FAILURE and walks the
|
|
1755
|
+
``models.escalation`` ladder, re-dispatching already-correct work on a
|
|
1756
|
+
more expensive model for a PATH gap, not a weak one (#2897 cost one
|
|
1757
|
+
instance of this an extra opus rerun on top of an already-passing
|
|
1758
|
+
sonnet leg).
|
|
1759
|
+
|
|
1760
|
+
Before this, the gap was discovered only when a smoke worker's own
|
|
1761
|
+
final-turn transcript happened to mention it (as #2897's did) — this
|
|
1762
|
+
function exists so the agent can say so ITSELF, at startup, in
|
|
1763
|
+
``journalctl --user -u coord-agent``, mirroring #1671's PATH diagnostics
|
|
1764
|
+
for capability probes.
|
|
1765
|
+
|
|
1766
|
+
Returns ``(ok, message)`` rather than logging directly, so the check is
|
|
1767
|
+
testable with a synthetic *base_env* with no mocking of ``shutil.which``
|
|
1768
|
+
or the logging module required. ``base_env=None`` (the production
|
|
1769
|
+
default) resolves against this process's real ``os.environ``, exactly
|
|
1770
|
+
like :func:`_worker_subprocess_env` itself.
|
|
1771
|
+
"""
|
|
1772
|
+
worker_path = _worker_subprocess_env(base_env).get("PATH", "")
|
|
1773
|
+
resolved = shutil.which("coord", path=worker_path)
|
|
1774
|
+
if resolved:
|
|
1775
|
+
return True, (
|
|
1776
|
+
f"coord agent: worker PATH check OK — 'coord' resolves at {resolved} "
|
|
1777
|
+
"(a smoke/test worker on this machine can record its verdict, #2936)"
|
|
1778
|
+
)
|
|
1779
|
+
return False, (
|
|
1780
|
+
"coord agent: WARNING 'coord' does NOT resolve on a WORKER's PATH — "
|
|
1781
|
+
f"searched: {worker_path!r}. A smoke/test worker on this machine can "
|
|
1782
|
+
"run its whole suite, PASS, and be structurally unable to record the "
|
|
1783
|
+
"verdict via `coord test <id> --passed`; the missing verdict then "
|
|
1784
|
+
"reads as a TEST FAILURE and escalates the model for an "
|
|
1785
|
+
"infrastructure gap, not a weak one (#2936). Fix: re-run "
|
|
1786
|
+
"install-agent.sh on this machine so ~/.local/bin/coord exists and "
|
|
1787
|
+
"symlinks to $HOME/.coord-venv/bin/coord (the blue/green symlink "
|
|
1788
|
+
"itself, never a resolved .blue/.green path)."
|
|
1789
|
+
)
|
|
1790
|
+
|
|
1791
|
+
|
|
1745
1792
|
def _slugify(text: str, max_len: int = 40) -> str:
|
|
1746
1793
|
"""Convert *text* to a URL/branch-safe slug."""
|
|
1747
1794
|
slug = re.sub(r"[^a-z0-9]+", "-", text.lower()).strip("-")
|
|
@@ -5444,6 +5491,18 @@ class AgentServer:
|
|
|
5444
5491
|
self.log_dir.mkdir(parents=True, exist_ok=True)
|
|
5445
5492
|
self._load_state()
|
|
5446
5493
|
|
|
5494
|
+
# #2936: verify AT STARTUP — not a suite-run later — that a worker
|
|
5495
|
+
# this agent spawns will be able to resolve `coord` on its own PATH
|
|
5496
|
+
# to record a test/smoke verdict. Only the failure case is logged:
|
|
5497
|
+
# this file configures no logging handler of its own (`coord agent`
|
|
5498
|
+
# never calls `configure_daemon_logging`, unlike `coord serve` —
|
|
5499
|
+
# #2862), so a bare `_log.info` here would be a silent no-op on the
|
|
5500
|
+
# real daemon while `_log.warning` reaches `journalctl` via Python's
|
|
5501
|
+
# stderr handler-of-last-resort with zero configuration needed.
|
|
5502
|
+
_coord_reachable, _coord_reachable_msg = worker_coord_reachable()
|
|
5503
|
+
if not _coord_reachable:
|
|
5504
|
+
_log.warning(_coord_reachable_msg)
|
|
5505
|
+
|
|
5447
5506
|
# ── #2299: hot config reload ────────────────────────────────────────────
|
|
5448
5507
|
|
|
5449
5508
|
#: Config-derived state that a reload refreshes, versus the state it must
|
|
@@ -3759,18 +3759,29 @@ def _reconcile_blocked(
|
|
|
3759
3759
|
except a CONFIRMED-clear reading OR a probe that came back unreadable
|
|
3760
3760
|
(#2806), which is deliberate: a `blocked` entry this sweep cannot say
|
|
3761
3761
|
anything new about must render EXACTLY as it did before #2230 existed.
|
|
3762
|
-
|
|
3762
|
+
Four ways to land there:
|
|
3763
3763
|
|
|
3764
3764
|
* the block is PERMANENT (:func:`is_permanent_block_reason`) — #1844's
|
|
3765
3765
|
guard refusal or #2019's dead end — neither of which any amount of
|
|
3766
3766
|
re-checking can ever change;
|
|
3767
|
+
* the block is `_resolve_prereqs`'s own unsatisfiable ``after=`` verdict
|
|
3768
|
+
(:func:`_is_unsatisfiable_prereq_reason`, #2935) — a `waiting` entry
|
|
3769
|
+
that never reached `running` has no assignment and no branch, so
|
|
3770
|
+
there is categorically no merge-queue row for THIS sweep to have any
|
|
3771
|
+
opinion about; the entry's fate is `_reconcile_blocked_after`'s alone
|
|
3772
|
+
to decide, from the ``after=`` graph, on this or a later tick. Checked
|
|
3773
|
+
— and returned from — before :func:`_blocked_gate_reading` even runs,
|
|
3774
|
+
specifically so :func:`_reconcile_blocked_unreadable` never gets the
|
|
3775
|
+
chance to overwrite `last_reason` with a merge-gate "could not read"
|
|
3776
|
+
sentence and clobber the one marker `_reconcile_blocked_after` needs
|
|
3777
|
+
to recognise this row again next tick — see #2935 for the incident a
|
|
3778
|
+
missing version of this branch caused;
|
|
3767
3779
|
* there is no evidence either way (:func:`_blocked_gate_reading` returns
|
|
3768
3780
|
``None``) AND :func:`_reconcile_blocked_unreadable` also has nothing
|
|
3769
|
-
to add —
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
would be;
|
|
3781
|
+
to add — a dispatch-time failure (#2589's two per-run shapes) has
|
|
3782
|
+
nothing this sweep can cheaply re-check, and guessing would be
|
|
3783
|
+
exactly the "worse than nothing" sweep the issue warns a naive
|
|
3784
|
+
"retry everything" pass would be;
|
|
3774
3785
|
* the gate is CONFIRMED still shut — the common, honest outcome for a
|
|
3775
3786
|
`blocked` entry that has not in fact recovered yet.
|
|
3776
3787
|
|
|
@@ -3801,6 +3812,58 @@ def _reconcile_blocked(
|
|
|
3801
3812
|
"""
|
|
3802
3813
|
if is_permanent_block_reason(entry.last_reason):
|
|
3803
3814
|
return None
|
|
3815
|
+
if _is_unsatisfiable_prereq_reason(entry.last_reason):
|
|
3816
|
+
# #2935: this entry's ONLY `blocked` cause is `_resolve_prereqs`'s
|
|
3817
|
+
# own after= verdict (step 4's launch walk, or its #2362/#2756
|
|
3818
|
+
# sibling `_reconcile_blocked_after`, called immediately before this
|
|
3819
|
+
# function in the same per-tick loop) — a `waiting` entry that never
|
|
3820
|
+
# reached `running` at all (see `_resolve_prereqs`'s own comment:
|
|
3821
|
+
# "attempts is deliberately NOT incremented: nothing was ever
|
|
3822
|
+
# launched for this entry"). A never-dispatched entry has no
|
|
3823
|
+
# assignment and no branch, so there is no merge-queue row for
|
|
3824
|
+
# #2230's gate sweep to have ANY opinion about — a merge gate cannot
|
|
3825
|
+
# exist for something that was never built, and probing for one
|
|
3826
|
+
# anyway is a category error, not a failed probe.
|
|
3827
|
+
#
|
|
3828
|
+
# This must be checked BEFORE `_blocked_gate_reading`/
|
|
3829
|
+
# `_reconcile_blocked_unreadable` below, not folded into their "no
|
|
3830
|
+
# evidence" handling: `_reconcile_blocked_unreadable` WRITES
|
|
3831
|
+
# `last_reason` the instant the shell's live probe was attempted and
|
|
3832
|
+
# came back with no key (`live_blocked_unreadable`) — and doing that
|
|
3833
|
+
# here would CLOBBER this exact marker text, which is the ONLY
|
|
3834
|
+
# signal `_reconcile_blocked_after` uses (both here and on every
|
|
3835
|
+
# future tick) to recognise this row as an after=-caused block worth
|
|
3836
|
+
# re-diagnosing at all. The claude-coordinator#2935 incident: five
|
|
3837
|
+
# dependents whose prerequisite had already landed stayed `blocked`
|
|
3838
|
+
# for 178-207 consecutive ticks apiece, because the FIRST tick after
|
|
3839
|
+
# they became re-evaluable this way overwrote their own "will never
|
|
3840
|
+
# satisfy"/"not queued, not merged and not open" text with this
|
|
3841
|
+
# sweep's "no merge-queue row ... could not be read" sentence —
|
|
3842
|
+
# after which `_reconcile_blocked_after`'s guard could never
|
|
3843
|
+
# recognise the row again, even once the prerequisite genuinely
|
|
3844
|
+
# landed. Bailing out here, before any write, keeps the marker
|
|
3845
|
+
# intact for as many ticks as it takes the after= graph to actually
|
|
3846
|
+
# clear — the entry's fate stays entirely `_reconcile_blocked_
|
|
3847
|
+
# after`'s to decide, exactly as the issue's "Expected behaviour"
|
|
3848
|
+
# asks: answered from the after= graph, never from a merge-gate
|
|
3849
|
+
# probe.
|
|
3850
|
+
#
|
|
3851
|
+
# Deliberately a text match on the SAME two verdict shapes
|
|
3852
|
+
# `_reconcile_blocked_after` itself already trusts to gate its own
|
|
3853
|
+
# resume — not the #2589/#2635 per-run dispatch markers
|
|
3854
|
+
# (`is_dispatch_failure_reason`/`is_empty_branch_death_reason`),
|
|
3855
|
+
# which stay OUT of this function on purpose (see
|
|
3856
|
+
# `test_a_pre_dispatch_reason_text_does_not_suppress_a_real_
|
|
3857
|
+
# unreadable_note`): those two describe what ONE launch attempt
|
|
3858
|
+
# dispatched, which can go stale the moment an earlier attempt on
|
|
3859
|
+
# the SAME entry left real evidence behind, so only the shell's live
|
|
3860
|
+
# re-check (`live_blocked_unreadable`) is trusted to suppress them.
|
|
3861
|
+
# `_resolve_prereqs`'s unsatisfiable verdict carries no such
|
|
3862
|
+
# per-run ambiguity: it is only ever written for a `waiting` entry
|
|
3863
|
+
# that has NEVER reached `running`, so the "nothing was ever
|
|
3864
|
+
# dispatched" reading it encodes cannot be contradicted by an
|
|
3865
|
+
# earlier attempt the way a per-run marker can.
|
|
3866
|
+
return None
|
|
3804
3867
|
reading = _blocked_gate_reading(entry, facts, live_blocked_gate)
|
|
3805
3868
|
if reading is None:
|
|
3806
3869
|
return _reconcile_blocked_unreadable(entry, live_blocked_unreadable)
|
|
@@ -109,14 +109,52 @@ echo "Installed: $("$VENV_DIR/bin/coord" version)"
|
|
|
109
109
|
|
|
110
110
|
# The venv is now fully installed and verified working (coord version printed
|
|
111
111
|
# above). Disarm the cleanup trap here: everything from this point on
|
|
112
|
-
# (machine-name detection, the systemd unit, node shims,
|
|
113
|
-
# loginctl) is unrelated to venv creation, and a failure in any of
|
|
114
|
-
# NOT delete a venv that already works — that would poison the retry
|
|
115
|
-
# from-scratch pip re-install just to get back to the same later
|
|
116
|
-
# (#2911 review).
|
|
112
|
+
# (machine-name detection, the systemd unit, the coord CLI shim, node shims,
|
|
113
|
+
# systemctl, loginctl) is unrelated to venv creation, and a failure in any of
|
|
114
|
+
# it must NOT delete a venv that already works — that would poison the retry
|
|
115
|
+
# with a from-scratch pip re-install just to get back to the same later
|
|
116
|
+
# failure (#2911 review).
|
|
117
117
|
trap - EXIT
|
|
118
118
|
CREATED_VENV=0
|
|
119
119
|
|
|
120
|
+
# --- coord CLI shim (#2936) --------------------------------------------------
|
|
121
|
+
# Workers are spawned with THIS agent's own venv stripped from PATH (#402,
|
|
122
|
+
# hardened by #2569's PIP_REQUIRE_VIRTUALENV after an 11h fleet outage — see
|
|
123
|
+
# coord/agent.py's `_worker_subprocess_env`). That strip is correct and must
|
|
124
|
+
# stay: a worker's bare `pip install -e .` must never land in the fleet's
|
|
125
|
+
# live $VENV_DIR. But nothing else guarantees a worker's PATH resolves
|
|
126
|
+
# `coord` itself — and when it doesn't, a smoke/test worker can run its
|
|
127
|
+
# whole suite, pass, and be structurally unable to record the verdict via
|
|
128
|
+
# `coord test <id> --passed`. The missing verdict then reads as a TEST
|
|
129
|
+
# FAILURE and walks the model-escalation ladder for an infrastructure gap,
|
|
130
|
+
# never a weak model (#2936; one instance cost an extra opus rerun of an
|
|
131
|
+
# already-passing sonnet leg).
|
|
132
|
+
#
|
|
133
|
+
# $HOME/.local/bin is (a) already put on the coord-agent unit's PATH below
|
|
134
|
+
# and (b) NOT stripped from a worker's PATH — #2569's strip matches
|
|
135
|
+
# $VENV_DIR/bin by name/realpath only, never $HOME/.local/bin. A plain
|
|
136
|
+
# symlink there closes the gap for every worker this agent spawns.
|
|
137
|
+
#
|
|
138
|
+
# MUST point at $VENV_DIR itself — the blue/green symlink `coord agent
|
|
139
|
+
# update` repoints atomically on every release (docs/AGENT_OPERATIONS.md) —
|
|
140
|
+
# NOT at a `readlink -f`-resolved `.blue`/`.green` path. Resolving it here
|
|
141
|
+
# would freeze the shim on whichever side happens to be live at install
|
|
142
|
+
# time and silently go stale on the very next blue/green swap.
|
|
143
|
+
COORD_SHIM_DIR="$HOME/.local/bin"
|
|
144
|
+
COORD_SHIM_TARGET="$VENV_DIR/bin/coord"
|
|
145
|
+
COORD_SHIM_LINK="$COORD_SHIM_DIR/coord"
|
|
146
|
+
mkdir -p "$COORD_SHIM_DIR"
|
|
147
|
+
if [ -L "$COORD_SHIM_LINK" ] && [ "$(readlink "$COORD_SHIM_LINK")" = "$COORD_SHIM_TARGET" ]; then
|
|
148
|
+
: # already ours, and already pointed at the unresolved blue/green symlink
|
|
149
|
+
elif [ -e "$COORD_SHIM_LINK" ] || [ -L "$COORD_SHIM_LINK" ]; then
|
|
150
|
+
echo "warning: $COORD_SHIM_LINK exists and is not the coord shim — left as-is"
|
|
151
|
+
echo " A smoke/test worker on this machine cannot record its verdict via"
|
|
152
|
+
echo " 'coord test <id> --passed' unless 'coord' resolves on ITS PATH (#2936)."
|
|
153
|
+
else
|
|
154
|
+
ln -s "$COORD_SHIM_TARGET" "$COORD_SHIM_LINK"
|
|
155
|
+
echo "Installed coord shim: $COORD_SHIM_LINK -> $COORD_SHIM_TARGET"
|
|
156
|
+
fi
|
|
157
|
+
|
|
120
158
|
# Detect machine name if not provided
|
|
121
159
|
if [ -z "$MACHINE_NAME" ]; then
|
|
122
160
|
MACHINE_NAME=$(hostname -s)
|
|
@@ -648,15 +648,33 @@ run_python_acceptance_ci() {
|
|
|
648
648
|
local ci_home="$WT/.coord-ci-home"
|
|
649
649
|
mkdir -p "$ci_home"
|
|
650
650
|
log "running: coord acceptance run --all --ci (cli-pytest route, ms-37)"
|
|
651
|
-
|
|
651
|
+
local rc=0
|
|
652
|
+
(env -u COORD_SERVICE_URL -u COORD_TOKEN -u COORD_CONFIG \
|
|
652
653
|
HOME="$ci_home" PATH="$venv/bin:$PATH" \
|
|
653
654
|
"$venv/bin/coord" acceptance run \
|
|
654
655
|
--repo claude-coordinator --all --ci \
|
|
655
656
|
--config "$WT/.github/coord-ci-acceptance.yml" \
|
|
656
|
-
--for-path coord/cli.py --path "$WT") >"$acc_out" 2>&1
|
|
657
|
+
--for-path coord/cli.py --path "$WT") >"$acc_out" 2>&1 || rc=$?
|
|
658
|
+
if [[ "$rc" -eq 0 ]]; then
|
|
657
659
|
say "PASS(python): ordinary suite + sealed acceptance suite (ms-37, cli-pytest) both green"
|
|
658
660
|
return 0
|
|
659
661
|
fi
|
|
662
|
+
# #2936: 127 is the shell's "command not found" for `$venv/bin/coord`
|
|
663
|
+
# itself — the SAME infrastructure class as the missing-python3/missing-
|
|
664
|
+
# fallback-command cases above (#1814), NOT a red suite. This venv is the
|
|
665
|
+
# one `run_python` just built (or found already usable) and successfully
|
|
666
|
+
# ran the ordinary pytest suite from moments ago, so a missing
|
|
667
|
+
# `$venv/bin/coord` here means this package's own console-script entry
|
|
668
|
+
# point never landed in it — an environment problem, not something the
|
|
669
|
+
# branch under test can be blamed for. Before this check, "coord:
|
|
670
|
+
# command not found" (#2936 — a smoke worker unable to resolve `coord` at
|
|
671
|
+
# all) and a genuinely red sealed suite were indistinguishable here, and
|
|
672
|
+
# the missing binary silently laundered into `RESULT: FAIL`.
|
|
673
|
+
if [[ "$rc" -eq 127 ]]; then
|
|
674
|
+
toolchain_missing coord python-acceptance-cli "\$venv/bin ($venv/bin), then \$PATH"
|
|
675
|
+
tail -n 20 "$acc_out" | sed 's/^/ /'
|
|
676
|
+
return 1
|
|
677
|
+
fi
|
|
660
678
|
say "FAIL(python): sealed acceptance suite (cli-pytest route, ms-37) failed under --ci — either a test-id NOT listed in expected_red failed for real, or one listed in expected_red unexpectedly passed (see .github/workflows/test.yml's 'A red result here is attributable, not a mystery' step for the two-cause triage)"
|
|
661
679
|
tail -n 40 "$acc_out" | sed 's/^/ /'
|
|
662
680
|
return 1
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"""Regression tests for #2936 — `run_python_acceptance_ci`'s ``coord`` call
|
|
2
|
+
in scripts/coord-test-runner.sh must never launder "the binary could not run
|
|
3
|
+
at all" into a red sealed-acceptance suite.
|
|
4
|
+
|
|
5
|
+
BACKGROUND. #2897's smoke worker on dell64 could not resolve `coord` on ITS
|
|
6
|
+
OWN path at all (no `~/.local/bin/coord` shim on that machine) and said so in
|
|
7
|
+
its own final turn — it printed the PASS marker but had no way to record the
|
|
8
|
+
verdict via `coord test <id> --passed`. The missing verdict then read as a
|
|
9
|
+
TEST FAILURE and walked the model-escalation ladder for a PATH gap, not a
|
|
10
|
+
weak model: an already-correct sonnet leg was re-run on opus for no reason.
|
|
11
|
+
|
|
12
|
+
THIS FILE'S SLICE OF #2936. `run_python_acceptance_ci` (the ms-37 cli-pytest
|
|
13
|
+
acceptance route, #2180) is the one place left in this script that shells out
|
|
14
|
+
to `coord` at all — the Rust/cargo arm that used to carry a similar risk left
|
|
15
|
+
with the crate in #2899. Before this fix, that call's `if ... ; then PASS
|
|
16
|
+
... fi` collapsed exit 127 ("$venv/bin/coord: No such file or directory" —
|
|
17
|
+
the shell's own "command not found", the same class #1814 already guards for
|
|
18
|
+
python3/cargo/the fallback command) into the same `FAIL(python)` a genuinely
|
|
19
|
+
red sealed suite gets. The two must never share a verdict: one says "the
|
|
20
|
+
branch broke something", the other says "the environment could not tell us
|
|
21
|
+
anything" (#1814's whole point).
|
|
22
|
+
|
|
23
|
+
HOW THIS RUNS IN MILLISECONDS. Same technique as
|
|
24
|
+
`tests/test_coord_test_runner_populated_home.py`: fake interpreters are
|
|
25
|
+
planted at the exact paths the runner probes (`$WT/.venv/bin/python`,
|
|
26
|
+
`$WT/.venv/bin/coord`) so no real venv is built and no real pytest/coord CLI
|
|
27
|
+
runs. The fake `coord` exits with whatever `FAKE_COORD_EXIT` says, which is
|
|
28
|
+
indistinguishable to the runner (and to a real "command not found") from
|
|
29
|
+
`$?` alone — the runner never looks past the exit code, so faking THAT is a
|
|
30
|
+
faithful stand-in for a truly-missing binary.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
from __future__ import annotations
|
|
34
|
+
|
|
35
|
+
import os
|
|
36
|
+
import stat
|
|
37
|
+
import subprocess
|
|
38
|
+
from pathlib import Path
|
|
39
|
+
|
|
40
|
+
import pytest
|
|
41
|
+
|
|
42
|
+
from .conftest import POSIX_BASH
|
|
43
|
+
|
|
44
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
45
|
+
SCRIPT = REPO_ROOT / "scripts" / "coord-test-runner.sh"
|
|
46
|
+
|
|
47
|
+
#: Answers just enough pytest invocation shapes to get the ordinary suite to
|
|
48
|
+
#: PASS and reach `run_python_post_arms` — `-c` probes (xdist detection) and
|
|
49
|
+
#: the full-suite `-m pytest ... --ignore=tests/acceptance` run. Nothing here
|
|
50
|
+
#: needs to answer a flake/baseline re-run (`::` node ids) or the
|
|
51
|
+
#: populated-home arm's bare test-file invocation: the fixture repo's diff
|
|
52
|
+
#: touches no python test files, so that arm SKIPs on its own before either
|
|
53
|
+
#: shape would be needed.
|
|
54
|
+
_FAKE_PYTHON = r"""#!/usr/bin/env bash
|
|
55
|
+
if [[ "$1" == "-c" ]]; then
|
|
56
|
+
exit 1 # no xdist -> serial
|
|
57
|
+
fi
|
|
58
|
+
if [[ "$1" == "-m" && "$2" == "pytest" ]]; then
|
|
59
|
+
printf '1 passed\n'
|
|
60
|
+
exit 0
|
|
61
|
+
fi
|
|
62
|
+
exit 0
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
#: A stand-in for `coord` at `$WT/.venv/bin/coord`, where
|
|
66
|
+
#: `run_python_acceptance_ci` looks for it once the ordinary suite is green.
|
|
67
|
+
#: `FAKE_COORD_EXIT` stands in for whatever exit code a real invocation would
|
|
68
|
+
#: have produced — 127 for "command not found", anything else for a real
|
|
69
|
+
#: pass/fail.
|
|
70
|
+
_FAKE_COORD = r"""#!/usr/bin/env bash
|
|
71
|
+
exit "${FAKE_COORD_EXIT:-0}"
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _git(cwd: Path, *args: str) -> str:
|
|
76
|
+
return subprocess.run(
|
|
77
|
+
["git", *args],
|
|
78
|
+
cwd=str(cwd),
|
|
79
|
+
capture_output=True,
|
|
80
|
+
text=True,
|
|
81
|
+
encoding="utf-8",
|
|
82
|
+
check=True,
|
|
83
|
+
).stdout.strip()
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _executable(path: Path, text: str) -> None:
|
|
87
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
88
|
+
path.write_text(text, encoding="utf-8")
|
|
89
|
+
path.chmod(path.stat().st_mode | stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@pytest.fixture
|
|
93
|
+
def repo(tmp_path: Path) -> Path:
|
|
94
|
+
"""A repo shaped like an ordinary code-coordinator Test leg: the diff
|
|
95
|
+
touches only ``coord/**`` (routes to pytest, no python test files, so the
|
|
96
|
+
populated-home arm SKIPs itself and does not need its own fake)."""
|
|
97
|
+
r = tmp_path / "repo"
|
|
98
|
+
(r / "coord").mkdir(parents=True)
|
|
99
|
+
_git(r, "init", "-q", "-b", "main")
|
|
100
|
+
_git(r, "config", "user.email", "t@t.com")
|
|
101
|
+
_git(r, "config", "user.name", "Test")
|
|
102
|
+
(r / "coord" / "foo.py").write_text("x = 1\n", encoding="utf-8")
|
|
103
|
+
(r / "README.md").write_text("init\n", encoding="utf-8")
|
|
104
|
+
_git(r, "add", "-A")
|
|
105
|
+
_git(r, "commit", "-qm", "initial")
|
|
106
|
+
_git(r, "tag", "base")
|
|
107
|
+
|
|
108
|
+
(r / "coord" / "foo.py").write_text("x = 2\n", encoding="utf-8")
|
|
109
|
+
_git(r, "add", "-A")
|
|
110
|
+
_git(r, "commit", "-qm", "branch change")
|
|
111
|
+
|
|
112
|
+
_executable(r / ".venv" / "bin" / "python", _FAKE_PYTHON)
|
|
113
|
+
_executable(r / ".venv" / "bin" / "coord", _FAKE_COORD)
|
|
114
|
+
return r
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _run(repo: Path, **fake_env: str) -> subprocess.CompletedProcess[str]:
|
|
118
|
+
env = dict(os.environ)
|
|
119
|
+
env.update(fake_env)
|
|
120
|
+
return subprocess.run(
|
|
121
|
+
[POSIX_BASH, str(SCRIPT), str(repo), "--base-ref", "base", "--repo", "code-coordinator"],
|
|
122
|
+
capture_output=True,
|
|
123
|
+
text=True,
|
|
124
|
+
encoding="utf-8",
|
|
125
|
+
timeout=120,
|
|
126
|
+
env=env,
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def test_a_green_acceptance_run_still_passes(repo: Path) -> None:
|
|
131
|
+
"""Sanity baseline: with no injected fault, the branch is green end to end."""
|
|
132
|
+
result = _run(repo, FAKE_COORD_EXIT="0")
|
|
133
|
+
|
|
134
|
+
assert result.returncode == 0, (result.stdout, result.stderr)
|
|
135
|
+
assert "RESULT: PASS" in result.stdout
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def test_missing_coord_binary_is_infrastructure_not_a_failed_suite(repo: Path) -> None:
|
|
139
|
+
"""The #2936 core guard: exit 127 ("command not found") from the `coord`
|
|
140
|
+
call must read as INFRA, never as a red sealed suite.
|
|
141
|
+
|
|
142
|
+
Asserting the ABSENCE of the failure wording matters as much as the
|
|
143
|
+
presence of the new one — `RESULT: FAIL` here is exactly what would
|
|
144
|
+
walk the model-escalation ladder for a PATH gap (#2897's dell64 cost).
|
|
145
|
+
"""
|
|
146
|
+
result = _run(repo, FAKE_COORD_EXIT="127")
|
|
147
|
+
|
|
148
|
+
out = result.stdout + result.stderr
|
|
149
|
+
assert result.returncode == 3, out
|
|
150
|
+
assert "TOOLCHAIN MISSING(python-acceptance-cli)" in out
|
|
151
|
+
assert "coord" in out
|
|
152
|
+
assert "RESULT: INFRA" in out
|
|
153
|
+
|
|
154
|
+
assert "FAIL(python)" not in out
|
|
155
|
+
assert "RESULT: FAIL" not in out
|
|
156
|
+
assert "sealed acceptance suite (cli-pytest route, ms-37) failed" not in out
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def test_missing_coord_binary_message_is_actionable(repo: Path) -> None:
|
|
160
|
+
"""Matches the #1814 bar every other TOOLCHAIN MISSING message meets:
|
|
161
|
+
which tool, where it looked, and that this is not a test verdict."""
|
|
162
|
+
result = _run(repo, FAKE_COORD_EXIT="127")
|
|
163
|
+
out = result.stdout + result.stderr
|
|
164
|
+
|
|
165
|
+
assert "INFRASTRUCTURE failure" in out
|
|
166
|
+
assert "python-acceptance-cli suite never ran" in out
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def test_a_genuinely_failing_acceptance_suite_is_still_a_failure(repo: Path) -> None:
|
|
170
|
+
"""The other half of the distinction: a real red sealed suite (any
|
|
171
|
+
non-127 non-zero exit) must not be laundered into an infrastructure
|
|
172
|
+
error by this change."""
|
|
173
|
+
result = _run(repo, FAKE_COORD_EXIT="3")
|
|
174
|
+
|
|
175
|
+
out = result.stdout + result.stderr
|
|
176
|
+
assert result.returncode == 1, out
|
|
177
|
+
assert "FAIL(python)" in out
|
|
178
|
+
assert "sealed acceptance suite (cli-pytest route, ms-37) failed" in out
|
|
179
|
+
assert "RESULT: FAIL" in out
|
|
180
|
+
assert "TOOLCHAIN MISSING" not in out
|
|
181
|
+
assert "RESULT: INFRA" not in out
|
|
@@ -3355,6 +3355,105 @@ def test_a_blocked_entry_that_has_hit_the_resume_ceiling_stays_blocked_and_says_
|
|
|
3355
3355
|
assert plan.launch is None
|
|
3356
3356
|
|
|
3357
3357
|
|
|
3358
|
+
# ── #2935: a never-dispatched after=-blocked entry must never reach the ────
|
|
3359
|
+
# merge-gate sweep at all
|
|
3360
|
+
#
|
|
3361
|
+
# claude-coordinator#2935: a `waiting` entry blocked by `_resolve_prereqs`'s
|
|
3362
|
+
# own unsatisfiable `after=` verdict has no assignment and no branch — there
|
|
3363
|
+
# is categorically no merge-queue row for #2230's sweep to have an opinion
|
|
3364
|
+
# about, "unreadable" or otherwise. Before this fix, `_reconcile_blocked`
|
|
3365
|
+
# never special-cased this shape: it fell through to `_blocked_gate_reading`
|
|
3366
|
+
# (which correctly finds no evidence) and then to `_reconcile_blocked_
|
|
3367
|
+
# unreadable`, which — whenever the shell's live probe had actually been
|
|
3368
|
+
# attempted (`live_blocked_unreadable` carrying a note, exactly what
|
|
3369
|
+
# `coord.commands.drive_queue._fetch_live_blocked_gate`'s #2806 self-heal
|
|
3370
|
+
# produces for a row with no merge-queue row) — WROTE `last_reason` to a
|
|
3371
|
+
# "could not be read" sentence. That overwrite destroyed the only marker
|
|
3372
|
+
# `_reconcile_blocked_after` uses to recognise this row as after=-caused at
|
|
3373
|
+
# all, so every later tick — even long after the prerequisite landed — took
|
|
3374
|
+
# the SAME "no evidence, probe unreadable" branch forever: a permanent
|
|
3375
|
+
# block, never resumed. These pin the fix: the merge-gate sweep must bail
|
|
3376
|
+
# out before ever consulting `live_blocked_unreadable` for this shape, and
|
|
3377
|
+
# the entry must still resume once its prereq actually lands.
|
|
3378
|
+
|
|
3379
|
+
|
|
3380
|
+
def test_a_never_dispatched_after_blocked_entry_never_reports_gate_unreadable():
|
|
3381
|
+
"""The shell's live probe (a real `live_blocked_unreadable` note, the
|
|
3382
|
+
exact shape `_fetch_live_blocked_gate` emits for a row with no
|
|
3383
|
+
merge-queue row) must not produce a `gate_unreadable` reconcile — or any
|
|
3384
|
+
write at all — for an entry whose only cause is an unsatisfiable
|
|
3385
|
+
`after=` verdict with its prereq still not landed."""
|
|
3386
|
+
dep_key = entry_key(REPO, 2897)
|
|
3387
|
+
entries = [
|
|
3388
|
+
entry(2897, position=0, state=STATE_BLOCKED),
|
|
3389
|
+
_blocked_entry(
|
|
3390
|
+
2899,
|
|
3391
|
+
position=1,
|
|
3392
|
+
after=(dep_key,),
|
|
3393
|
+
last_reason=f"pre-req {dep_key} is queued but blocked — it will never satisfy",
|
|
3394
|
+
),
|
|
3395
|
+
]
|
|
3396
|
+
plan = plan_tick(
|
|
3397
|
+
entries,
|
|
3398
|
+
board(),
|
|
3399
|
+
capacity=1,
|
|
3400
|
+
live_blocked_gate={},
|
|
3401
|
+
live_blocked_unreadable={
|
|
3402
|
+
entry_key(REPO, 2899): "no merge-queue row for this entry, even "
|
|
3403
|
+
"after the self-heal enqueue attempt"
|
|
3404
|
+
},
|
|
3405
|
+
)
|
|
3406
|
+
assert plan.reconciles == ()
|
|
3407
|
+
assert plan.launch is None
|
|
3408
|
+
|
|
3409
|
+
|
|
3410
|
+
def test_a_never_dispatched_after_blocked_entry_still_resumes_once_its_prereq_lands():
|
|
3411
|
+
"""End-to-end regression for the #2935 incident: a tick where the
|
|
3412
|
+
prereq has NOT yet landed and the shell's probe comes back unreadable
|
|
3413
|
+
must leave `last_reason` untouched (nothing in `plan.reconciles` to
|
|
3414
|
+
write) — so a LATER tick, once the prereq lands, still recognises the
|
|
3415
|
+
original marker and resumes normally, exactly as it would have if the
|
|
3416
|
+
spurious probe had never run."""
|
|
3417
|
+
dep_key = entry_key(REPO, 2897)
|
|
3418
|
+
blocked_dep = entry(2897, position=0, state=STATE_BLOCKED)
|
|
3419
|
+
dependent = _blocked_entry(
|
|
3420
|
+
2899,
|
|
3421
|
+
position=1,
|
|
3422
|
+
after=(dep_key,),
|
|
3423
|
+
resumes=0,
|
|
3424
|
+
last_reason=f"pre-req {dep_key} is queued but blocked — it will never satisfy",
|
|
3425
|
+
)
|
|
3426
|
+
|
|
3427
|
+
# Tick 1: prereq still blocked, shell's probe comes back unreadable —
|
|
3428
|
+
# must be a total no-op (the #2935 fix).
|
|
3429
|
+
tick1 = plan_tick(
|
|
3430
|
+
[blocked_dep, dependent],
|
|
3431
|
+
board(),
|
|
3432
|
+
capacity=1,
|
|
3433
|
+
live_blocked_gate={},
|
|
3434
|
+
live_blocked_unreadable={
|
|
3435
|
+
entry_key(REPO, 2899): "no merge-queue row for this entry, even "
|
|
3436
|
+
"after the self-heal enqueue attempt"
|
|
3437
|
+
},
|
|
3438
|
+
)
|
|
3439
|
+
assert tick1.reconciles == ()
|
|
3440
|
+
|
|
3441
|
+
# Tick 2: the prereq has since landed. `dependent`'s `last_reason` is
|
|
3442
|
+
# STILL the original unsatisfiable-prereq marker — untouched by tick 1 —
|
|
3443
|
+
# so `_reconcile_blocked_after` recognises it and resumes it, even
|
|
3444
|
+
# though a merge-gate probe against it failed in between.
|
|
3445
|
+
tick2 = plan_tick(
|
|
3446
|
+
[entry(2897, position=0, state=STATE_DONE), dependent],
|
|
3447
|
+
board(merged=(2897,)),
|
|
3448
|
+
capacity=1,
|
|
3449
|
+
)
|
|
3450
|
+
reconcile = next(r for r in tick2.reconciles if r.key == entry_key(REPO, 2899))
|
|
3451
|
+
assert reconcile.outcome == "resumed"
|
|
3452
|
+
assert reconcile.updates["state"] == STATE_WAITING
|
|
3453
|
+
assert reconcile.updates["attempts"] == 0
|
|
3454
|
+
assert tick2.launch is not None and tick2.launch.issue == 2899
|
|
3455
|
+
|
|
3456
|
+
|
|
3358
3457
|
# ── #2362: a blocked entry resumes once its unsatisfiable after= lands ─────
|
|
3359
3458
|
#
|
|
3360
3459
|
# `_resolve_prereqs` blocks a `waiting` entry the instant one of its named
|