code-coordinator 0.5.578__tar.gz → 0.5.580__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.578 → code_coordinator-0.5.580}/PKG-INFO +1 -1
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/code_coordinator.egg-info/SOURCES.txt +2 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/code_coordinator.egg-info/scm_file_list.json +2 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/agent.py +24 -1
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/agent_update.py +36 -31
- code_coordinator-0.5.580/coord/dirlink.py +124 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent.py +71 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_api_error.py +20 -37
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_update_bluegreen.py +2 -1
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_usage_limit.py +37 -23
- code_coordinator-0.5.580/tests/test_dirlink.py +192 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_venv_live_install_2121.py +8 -8
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/.gitignore +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/CLAUDE.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/GOAL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/LICENSE +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/MANIFEST.in +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/README.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/__init__.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/audit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/backup.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/block_log.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/board_service.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/brain.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/claim.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/cli.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/client.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/codegen.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/comments.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/config.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dao.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/db.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/deps.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/drive.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/events.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/filelock.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/freshness.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/gates.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/goal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/context.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/models.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/render.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/health/units.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/hooks.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/interactive.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/models.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/network.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/notify.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/openapi.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/parentage.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/plans.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/progress.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/release_window.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/reports.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/review.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/self_health.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/smoke.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/split_work.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/sql.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/state.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/test_author.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/test_report.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/usage.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/install-agent.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/pyproject.toml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/setup.cfg +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/__init__.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/backends.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/conftest.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_client.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_config.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_db.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_events.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_init.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_models.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_network.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_review.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_session.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_split.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_state.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.578 → code_coordinator-0.5.580}/tests/write_parity.py +0 -0
|
@@ -70,6 +70,7 @@ coord/deploy_units.py
|
|
|
70
70
|
coord/deprecation_telemetry.py
|
|
71
71
|
coord/deps.py
|
|
72
72
|
coord/diagnose.py
|
|
73
|
+
coord/dirlink.py
|
|
73
74
|
coord/dispatch.py
|
|
74
75
|
coord/dispatch_liveness.py
|
|
75
76
|
coord/dist_name.py
|
|
@@ -619,6 +620,7 @@ tests/test_deploy_web_unit.py
|
|
|
619
620
|
tests/test_deprecation_telemetry.py
|
|
620
621
|
tests/test_deps.py
|
|
621
622
|
tests/test_diagnose.py
|
|
623
|
+
tests/test_dirlink.py
|
|
622
624
|
tests/test_dispatch.py
|
|
623
625
|
tests/test_dispatch_liveness.py
|
|
624
626
|
tests/test_dispatch_target_validation.py
|
{code_coordinator-0.5.578 → code_coordinator-0.5.580}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -132,6 +132,7 @@
|
|
|
132
132
|
"coord/deprecation_telemetry.py",
|
|
133
133
|
"coord/deps.py",
|
|
134
134
|
"coord/diagnose.py",
|
|
135
|
+
"coord/dirlink.py",
|
|
135
136
|
"coord/dispatch.py",
|
|
136
137
|
"coord/dispatch_liveness.py",
|
|
137
138
|
"coord/dist_name.py",
|
|
@@ -646,6 +647,7 @@
|
|
|
646
647
|
"tests/test_deprecation_telemetry.py",
|
|
647
648
|
"tests/test_deps.py",
|
|
648
649
|
"tests/test_diagnose.py",
|
|
650
|
+
"tests/test_dirlink.py",
|
|
649
651
|
"tests/test_dispatch.py",
|
|
650
652
|
"tests/test_dispatch_liveness.py",
|
|
651
653
|
"tests/test_dispatch_target_validation.py",
|
|
@@ -634,8 +634,31 @@ def _maybe_bash_wrap(argv: list[str], enabled: bool) -> list[str]:
|
|
|
634
634
|
stdin pipe, and process-group kills all behave identically to a bare
|
|
635
635
|
spawn. This is the upstream headline fix for the daemon-spawn freeze
|
|
636
636
|
(anthropics/claude-code#56268). When disabled, the bare argv is returned.
|
|
637
|
+
|
|
638
|
+
#2843: a no-op on win32 regardless of *enabled*. `bash_wrap_spawn`
|
|
639
|
+
defaults to ``True`` (``ConcurrencyConfig.bash_wrap_spawn`` /
|
|
640
|
+
``AgentServer.__init__``'s own default) with no platform guard anywhere
|
|
641
|
+
upstream of this call, so every assignment on a win32 agent — including
|
|
642
|
+
every fixture across ``tests/test_agent*.py`` that never explicitly sets
|
|
643
|
+
``bash_wrap_spawn=False`` — silently routed through here. Two independent
|
|
644
|
+
reasons this must not reach a real ``bash`` on win32, not one:
|
|
645
|
+
(1) a POSIX shell is not guaranteed present at all (no shell, no
|
|
646
|
+
worktree-isolation guarantee the wrap exists to provide); and (2) even
|
|
647
|
+
where one IS present (Git for Windows' bundled MSYS bash on the
|
|
648
|
+
`windows-latest` runner), its `exec` builtin does not replace the process
|
|
649
|
+
image for a native (non-Cygwin/MSYS) executable the way POSIX `exec()`
|
|
650
|
+
does — so the "same PID, process-group kills behave identically to a
|
|
651
|
+
bare spawn" invariant this whole mitigation depends on does not hold,
|
|
652
|
+
and wrapping would be actively wrong there, not merely unavailable.
|
|
653
|
+
Measured root cause of the W11 cluster (#2843, child of #2680): the
|
|
654
|
+
worker process never spawned (or spawned under a PID the reaper's
|
|
655
|
+
bookkeeping didn't expect), so `_reap` observed a failure shape and the
|
|
656
|
+
assignment landed FAILED where every one of these tests expects
|
|
657
|
+
DONE/ADVISORY/REFUSED_*. This is a platform-assumption bug in THIS
|
|
658
|
+
function, not a process-group/Job-Objects runtime dependency — #1163
|
|
659
|
+
(CP-7, Job Objects) is unrelated and not needed to fix it.
|
|
637
660
|
"""
|
|
638
|
-
if not enabled:
|
|
661
|
+
if not enabled or sys.platform == "win32":
|
|
639
662
|
return argv
|
|
640
663
|
return ["bash", "-c", "exec " + shlex.join(argv)]
|
|
641
664
|
|
|
@@ -13,11 +13,16 @@ An update must be all-or-nothing.
|
|
|
13
13
|
The fix: never write into the venv that's live. Install the target version
|
|
14
14
|
into a **fresh** venv — one of two fixed "slots" next to the live one
|
|
15
15
|
(``~/.coord-venv.blue`` / ``~/.coord-venv.green``) — smoke-check it, and
|
|
16
|
-
only then flip a
|
|
17
|
-
*complete* slot, old or new, never
|
|
18
|
-
existing path is atomic on POSIX (same
|
|
19
|
-
invocation racing the flip sees either the
|
|
20
|
-
install — there is no observable in-between
|
|
16
|
+
only then flip a directory link (see :mod:`coord.dirlink`) so
|
|
17
|
+
``~/.coord-venv`` always resolves to one *complete* slot, old or new, never
|
|
18
|
+
a mix. Rename of a symlink onto an existing path is atomic on POSIX (same
|
|
19
|
+
filesystem), so any `coord` invocation racing the flip sees either the
|
|
20
|
+
fully-old or the fully-new install — there is no observable in-between
|
|
21
|
+
state. #2842: POSIX uses a symlink for exactly that atomicity guarantee;
|
|
22
|
+
win32 has no directory-reparse-point equivalent of an atomic rename-over,
|
|
23
|
+
so there the flip is best-effort (old link removed, new one renamed in
|
|
24
|
+
immediately after) rather than a silent single-platform fiction — see
|
|
25
|
+
:mod:`coord.dirlink` for the full reasoning.
|
|
21
26
|
|
|
22
27
|
Using exactly two named slots (rather than a fresh directory per release)
|
|
23
28
|
also gives rollback for free: the slot that was live before the swap is
|
|
@@ -86,6 +91,7 @@ from dataclasses import dataclass
|
|
|
86
91
|
from pathlib import Path
|
|
87
92
|
|
|
88
93
|
from coord import restart_cmd
|
|
94
|
+
from coord.dirlink import is_dir_link, make_dir_link, read_dir_link, replace_dir_link
|
|
89
95
|
from coord.platform_paths import venv_exe, venv_pip, venv_python
|
|
90
96
|
|
|
91
97
|
_log = logging.getLogger(__name__)
|
|
@@ -391,23 +397,24 @@ def current_slot(venv_dir: Path) -> Path | None:
|
|
|
391
397
|
way, since ``install-agent.sh`` creates ``~/.coord-venv`` as a real
|
|
392
398
|
directory.
|
|
393
399
|
"""
|
|
394
|
-
if not venv_dir
|
|
400
|
+
if not is_dir_link(venv_dir):
|
|
395
401
|
return None
|
|
396
|
-
target = venv_dir
|
|
402
|
+
target = read_dir_link(venv_dir)
|
|
397
403
|
if not target.is_absolute():
|
|
398
404
|
target = (venv_dir.parent / target).resolve()
|
|
399
405
|
return target
|
|
400
406
|
|
|
401
407
|
|
|
402
408
|
def ensure_symlink_layout(venv_dir: Path) -> Path:
|
|
403
|
-
"""Migrate *venv_dir* to the blue/green
|
|
404
|
-
|
|
405
|
-
Idempotent: if *venv_dir* is already a
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
409
|
+
"""Migrate *venv_dir* to the blue/green link layout if it isn't already.
|
|
410
|
+
|
|
411
|
+
Idempotent: if *venv_dir* is already a directory link (a symlink on
|
|
412
|
+
POSIX, a junction on win32 — see :mod:`coord.dirlink`), just returns
|
|
413
|
+
its current target. Otherwise renames the existing plain directory
|
|
414
|
+
into the ``.blue`` slot and replaces *venv_dir* with a link pointing at
|
|
415
|
+
it. This is the one-time, one-machine migration every pre-#1241
|
|
416
|
+
install needs; every update after that stays in the link layout, so
|
|
417
|
+
this becomes a no-op for the rest of that machine's life.
|
|
411
418
|
"""
|
|
412
419
|
existing = current_slot(venv_dir)
|
|
413
420
|
if existing is not None:
|
|
@@ -418,13 +425,13 @@ def ensure_symlink_layout(venv_dir: Path) -> Path:
|
|
|
418
425
|
if blue.exists():
|
|
419
426
|
# Should be unreachable — `blue`/`green` only ever come into being
|
|
420
427
|
# via this function or `perform_update`, both gated on `venv_dir`
|
|
421
|
-
# not already being a
|
|
422
|
-
# is there.
|
|
428
|
+
# not already being a directory link. Refuse rather than clobber
|
|
429
|
+
# whatever is there.
|
|
423
430
|
raise FileExistsError(
|
|
424
431
|
f"{blue} already exists — refusing to migrate {venv_dir} over it"
|
|
425
432
|
)
|
|
426
433
|
venv_dir.rename(blue)
|
|
427
|
-
venv_dir
|
|
434
|
+
make_dir_link(venv_dir, blue)
|
|
428
435
|
return blue
|
|
429
436
|
|
|
430
437
|
|
|
@@ -517,20 +524,18 @@ def running_slot(venv_dir: Path) -> Path | None:
|
|
|
517
524
|
|
|
518
525
|
|
|
519
526
|
def _atomic_swap(venv_dir: Path, new_slot: Path) -> None:
|
|
520
|
-
"""Flip *venv_dir* to point at *new_slot
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
527
|
+
"""Flip *venv_dir* to point at *new_slot*.
|
|
528
|
+
|
|
529
|
+
Delegates to :func:`coord.dirlink.replace_dir_link`: atomic on POSIX
|
|
530
|
+
(a symlink `rename()` onto an existing path is a single filesystem
|
|
531
|
+
operation there, so any `coord` invocation racing this always sees
|
|
532
|
+
either the old, complete slot or the new, complete slot — never a
|
|
533
|
+
half-updated ``venv_dir``) and best-effort on win32, where a directory
|
|
534
|
+
junction has no equivalent single-syscall replace (#2842) — see that
|
|
535
|
+
module's docstring for the platform difference this does *not* paper
|
|
536
|
+
over.
|
|
528
537
|
"""
|
|
529
|
-
|
|
530
|
-
if tmp_link.is_symlink() or tmp_link.exists():
|
|
531
|
-
tmp_link.unlink()
|
|
532
|
-
tmp_link.symlink_to(new_slot, target_is_directory=True)
|
|
533
|
-
tmp_link.replace(venv_dir)
|
|
538
|
+
replace_dir_link(venv_dir, new_slot)
|
|
534
539
|
|
|
535
540
|
|
|
536
541
|
def _smoke_check(slot: Path, *, target_version: str | None) -> tuple[bool, str | None, str]:
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""Cross-platform directory links: symlinks on POSIX, junctions on win32 (#2842).
|
|
2
|
+
|
|
3
|
+
``coord.agent_update``'s blue/green venv swap used to call
|
|
4
|
+
``Path.symlink_to``/``Path.readlink``/``Path.is_symlink`` directly, which is
|
|
5
|
+
POSIX-correct but breaks two ways on win32:
|
|
6
|
+
|
|
7
|
+
1. **Creating a directory symlink needs a privilege** most installs don't
|
|
8
|
+
have (Developer Mode or ``SeCreateSymbolicLinkPrivilege``) — relying on it
|
|
9
|
+
is not portable even when it happens to be available on a given box.
|
|
10
|
+
2. **Replacing an existing directory symlink via ``os.replace``/
|
|
11
|
+
``Path.replace`` fails outright** with ``[WinError 5] Access is denied``.
|
|
12
|
+
The POSIX guarantee that ``rename(2)`` atomically replaces a symlink has
|
|
13
|
+
no direct win32 equivalent for directory reparse points.
|
|
14
|
+
|
|
15
|
+
The portable substitute is a **directory junction**
|
|
16
|
+
(``_winapi.CreateJunction``, the same thing ``mklink /J`` produces), which
|
|
17
|
+
needs no special privilege. This is the identical substitution #1163 (CP-7)
|
|
18
|
+
already names for the git-worktree symlink problem — so this module is
|
|
19
|
+
intentionally generic (it knows nothing about venvs or worktrees) and
|
|
20
|
+
*both* call sites should route through it rather than each growing their
|
|
21
|
+
own win32 branch. :mod:`coord.agent_update` is the first consumer; #1163's
|
|
22
|
+
worktree-junction work should become the second rather than reinventing
|
|
23
|
+
this.
|
|
24
|
+
|
|
25
|
+
Junctions are not atomically swappable the way a POSIX symlink rename is —
|
|
26
|
+
there is no win32 "replace this directory reparse point with that one in
|
|
27
|
+
one syscall" primitive — so :func:`replace_dir_link` is atomic on POSIX
|
|
28
|
+
(same guarantee ``coord.agent_update`` already documents) and best-effort
|
|
29
|
+
on win32: the old link is removed (not its target — see
|
|
30
|
+
:func:`remove_dir_link`) and the new one renamed into place immediately
|
|
31
|
+
after, which leaves a sub-millisecond window with no link rather than no
|
|
32
|
+
atomicity guarantee at all. That is a real, documented platform difference,
|
|
33
|
+
not a silent gap: see ``coord.agent_update._atomic_swap``.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
from __future__ import annotations
|
|
37
|
+
|
|
38
|
+
import sys
|
|
39
|
+
from pathlib import Path
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def make_dir_link(link_path: Path, target: Path) -> None:
|
|
43
|
+
"""Create a directory link at *link_path* pointing at *target*.
|
|
44
|
+
|
|
45
|
+
POSIX: a directory symlink (``Path.symlink_to``). win32: a directory
|
|
46
|
+
junction (``_winapi.CreateJunction``), which — unlike a Windows
|
|
47
|
+
symlink — needs no Developer Mode / ``SeCreateSymbolicLinkPrivilege``.
|
|
48
|
+
"""
|
|
49
|
+
if sys.platform == "win32":
|
|
50
|
+
import _winapi # noqa: PLC0415 -- win32-only stdlib module
|
|
51
|
+
|
|
52
|
+
_winapi.CreateJunction(str(target), str(link_path))
|
|
53
|
+
else:
|
|
54
|
+
link_path.symlink_to(target, target_is_directory=True)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def remove_dir_link(link_path: Path) -> None:
|
|
58
|
+
"""Remove the link itself at *link_path* — never the directory it
|
|
59
|
+
points at.
|
|
60
|
+
|
|
61
|
+
POSIX: ``Path.unlink()`` on a symlink removes the link, not its
|
|
62
|
+
target. win32: a junction is a reparse point on an otherwise-empty
|
|
63
|
+
directory entry, removed with ``Path.rmdir()`` rather than
|
|
64
|
+
``shutil.rmtree`` — a recursive ``rmtree`` would be wrong here since a
|
|
65
|
+
junction is transparent to many APIs, and could walk straight through
|
|
66
|
+
it into the target and delete *its* contents instead of just the link.
|
|
67
|
+
"""
|
|
68
|
+
if sys.platform == "win32":
|
|
69
|
+
link_path.rmdir()
|
|
70
|
+
else:
|
|
71
|
+
link_path.unlink()
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def is_dir_link(path: Path) -> bool:
|
|
75
|
+
"""Whether *path* is a directory link this module manages.
|
|
76
|
+
|
|
77
|
+
A symlink on POSIX; a symlink *or* a junction on win32 — both are
|
|
78
|
+
reparse points, and :func:`make_dir_link` only ever produces a
|
|
79
|
+
junction there, but a pre-existing or hand-made symlink should still
|
|
80
|
+
be recognized rather than silently mishandled.
|
|
81
|
+
"""
|
|
82
|
+
if path.is_symlink():
|
|
83
|
+
return True
|
|
84
|
+
if sys.platform == "win32":
|
|
85
|
+
is_junction = getattr(path, "is_junction", None)
|
|
86
|
+
if is_junction is not None:
|
|
87
|
+
return is_junction()
|
|
88
|
+
return False
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def read_dir_link(link_path: Path) -> Path:
|
|
92
|
+
"""Return the literal target *link_path* was created pointing at.
|
|
93
|
+
|
|
94
|
+
``Path.readlink()`` resolves junctions as well as symlinks on win32
|
|
95
|
+
(support landed in CPython 3.8), so one call covers both platforms.
|
|
96
|
+
"""
|
|
97
|
+
return link_path.readlink()
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def replace_dir_link(link_path: Path, target: Path) -> None:
|
|
101
|
+
"""Flip *link_path* to point at *target*, replacing whatever (if
|
|
102
|
+
anything) is there.
|
|
103
|
+
|
|
104
|
+
Builds the new link at a temp path next to *link_path* first, so a
|
|
105
|
+
failure constructing it never touches the existing link. Atomic on
|
|
106
|
+
POSIX — the temp link is ``rename()``d directly onto *link_path*,
|
|
107
|
+
which POSIX guarantees replaces an existing path (symlink or
|
|
108
|
+
otherwise) in one filesystem operation when both are on the same
|
|
109
|
+
filesystem (true here: siblings under the same parent). Best-effort on
|
|
110
|
+
win32 — there is no equivalent single-syscall replace for a directory
|
|
111
|
+
reparse point, so the old link is removed and the new one renamed into
|
|
112
|
+
place immediately after; see the module docstring.
|
|
113
|
+
"""
|
|
114
|
+
tmp_link = link_path.parent / f".{link_path.name}.next-link"
|
|
115
|
+
if is_dir_link(tmp_link) or tmp_link.exists():
|
|
116
|
+
remove_dir_link(tmp_link) if is_dir_link(tmp_link) else tmp_link.unlink()
|
|
117
|
+
make_dir_link(tmp_link, target)
|
|
118
|
+
|
|
119
|
+
if sys.platform == "win32":
|
|
120
|
+
if is_dir_link(link_path):
|
|
121
|
+
remove_dir_link(link_path)
|
|
122
|
+
tmp_link.rename(link_path)
|
|
123
|
+
else:
|
|
124
|
+
tmp_link.replace(link_path)
|
|
@@ -576,6 +576,27 @@ def test_assign_unknown_binary_marks_failed(tmp_path: Path) -> None:
|
|
|
576
576
|
assert final.error is not None
|
|
577
577
|
|
|
578
578
|
|
|
579
|
+
# #2843: `_maybe_bash_wrap`'s whole `enabled=True` branch spawns a real
|
|
580
|
+
# `bash -c 'exec ...'` parent — a POSIX shell with POSIX `exec()` semantics
|
|
581
|
+
# (process-image replacement, same PID). On win32 this is now a deliberate
|
|
582
|
+
# no-op (see `_maybe_bash_wrap`'s own docstring): bash isn't guaranteed
|
|
583
|
+
# present, and Git for Windows' bundled MSYS bash doesn't give the
|
|
584
|
+
# same-PID/process-group invariant this mitigation depends on even when it
|
|
585
|
+
# is. The tests marked with this skip exist specifically to exercise that
|
|
586
|
+
# POSIX-only wrapping, so they skip on win32 rather than assert a behavior
|
|
587
|
+
# the fix deliberately disables there — root cause and measurement in
|
|
588
|
+
# #2843 (W11, child of #2680).
|
|
589
|
+
_bash_wrap_posix_only = pytest.mark.skipif(
|
|
590
|
+
sys.platform == "win32",
|
|
591
|
+
reason="exercises _maybe_bash_wrap's real bash -c 'exec ...' wrapping, "
|
|
592
|
+
"which coord/agent.py now no-ops on win32 (#2843) — bash isn't "
|
|
593
|
+
"guaranteed present, and where it is (Git for Windows' MSYS bash) its "
|
|
594
|
+
"exec builtin doesn't preserve the PID/process-group invariant this "
|
|
595
|
+
"mitigation depends on",
|
|
596
|
+
)
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
@_bash_wrap_posix_only
|
|
579
600
|
def test_assign_unknown_binary_bash_wrapped_marks_failed(tmp_path: Path) -> None:
|
|
580
601
|
"""With the bash-wrap on, an unknown binary fails via bash exec's non-zero
|
|
581
602
|
exit (#299) — the assignment still ends up FAILED."""
|
|
@@ -626,6 +647,7 @@ def test_inject_message_writes_to_worker_stdin(tmp_path: Path) -> None:
|
|
|
626
647
|
assert "# inject: second message" in log, "inject marker missing from log"
|
|
627
648
|
|
|
628
649
|
|
|
650
|
+
@_bash_wrap_posix_only
|
|
629
651
|
def test_maybe_bash_wrap_helper() -> None:
|
|
630
652
|
"""The pure wrap helper produces bash -c 'exec ...' when enabled (#299)."""
|
|
631
653
|
from coord.agent import _maybe_bash_wrap
|
|
@@ -636,6 +658,28 @@ def test_maybe_bash_wrap_helper() -> None:
|
|
|
636
658
|
assert wrapped == ["bash", "-c", "exec claude -p --allowedTools Read,Bash"]
|
|
637
659
|
|
|
638
660
|
|
|
661
|
+
def test_maybe_bash_wrap_is_a_noop_on_win32(monkeypatch) -> None:
|
|
662
|
+
"""#2843: the whole point of the fix, pinned platform-independently.
|
|
663
|
+
|
|
664
|
+
`_maybe_bash_wrap` must return the bare argv on win32 even when
|
|
665
|
+
`enabled=True` — this is what makes `bash_wrap_spawn`'s default-True
|
|
666
|
+
harmless there instead of routing every assignment through a `bash`
|
|
667
|
+
that isn't guaranteed present (and, where it is — Git for Windows'
|
|
668
|
+
MSYS bash — doesn't preserve the same-PID invariant the wrap exists
|
|
669
|
+
for). Runs on every platform (monkeypatches `coord.agent.sys.platform`
|
|
670
|
+
rather than requiring an actual win32 host), so this regression-guards
|
|
671
|
+
the fix on the Linux/macOS CI that actually exercises it.
|
|
672
|
+
"""
|
|
673
|
+
import coord.agent as agent_mod
|
|
674
|
+
from coord.agent import _maybe_bash_wrap
|
|
675
|
+
|
|
676
|
+
argv = ["claude", "-p"]
|
|
677
|
+
monkeypatch.setattr(agent_mod.sys, "platform", "win32")
|
|
678
|
+
assert _maybe_bash_wrap(argv, enabled=True) == argv
|
|
679
|
+
assert _maybe_bash_wrap(argv, enabled=False) == argv
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
@_bash_wrap_posix_only
|
|
639
683
|
def test_spawn_bash_wrap_enabled_routes_through_bash(tmp_path: Path) -> None:
|
|
640
684
|
"""With bash_wrap_spawn=True, _spawn launches via bash -c 'exec ...'."""
|
|
641
685
|
import coord.agent as agent_mod
|
|
@@ -4367,7 +4411,33 @@ def test_stash_artifacts_for_branch_partial_miss_logs_named_glob(
|
|
|
4367
4411
|
|
|
4368
4412
|
# ── #1323: build_command runs before stash (fix #3) ──────────────────────────
|
|
4369
4413
|
|
|
4414
|
+
# #2843 investigation note (NOT the W11 reap-lifecycle cluster this issue is
|
|
4415
|
+
# otherwise about, and NOT #1163 either): `_run_pre_stash_build`
|
|
4416
|
+
# (coord/agent.py) unconditionally runs the operator-authored
|
|
4417
|
+
# `build_commands` string from coordinator.yml via `["/bin/sh", "-c", ...]`.
|
|
4418
|
+
# That's a real win32 gap — there is no `/bin/sh` on Windows — but it is a
|
|
4419
|
+
# DIFFERENT, pre-existing limitation from the reap-status-stuck-on-FAILED
|
|
4420
|
+
# signature #2843 targets (this fails a log-content assertion about the
|
|
4421
|
+
# build command's own output, never the assignment's status), and the two
|
|
4422
|
+
# tests below each hand it a POSIX-only shell snippet (`printf
|
|
4423
|
+
# "\\x7fELF%0200d" ...`, `exit 42`) as their `build_commands` value, so even
|
|
4424
|
+
# swapping the interpreter for `cmd /c` would not make them portable — the
|
|
4425
|
+
# fixture content itself is shell-specific, not just the dispatch mechanism.
|
|
4426
|
+
# Porting `build_commands` cross-platform (cmd.exe/PowerShell translation of
|
|
4427
|
+
# an arbitrary operator-authored shell string) is real, separate scope this
|
|
4428
|
+
# slice does not take on; skip rather than half-port.
|
|
4429
|
+
_build_command_posix_only = pytest.mark.skipif(
|
|
4430
|
+
sys.platform == "win32",
|
|
4431
|
+
reason="build_commands (coordinator.yml) runs via `/bin/sh -c` "
|
|
4432
|
+
"(coord.agent._run_pre_stash_build) and these two tests' own "
|
|
4433
|
+
"build_commands values are POSIX shell snippets — no `/bin/sh` on "
|
|
4434
|
+
"Windows, and no portable stand-in without a cross-platform "
|
|
4435
|
+
"build_commands port (separate from #2843's W11 reap-lifecycle cluster "
|
|
4436
|
+
"and from #1163's Job Objects/ConPTY/junctions scope)",
|
|
4437
|
+
)
|
|
4438
|
+
|
|
4370
4439
|
|
|
4440
|
+
@_build_command_posix_only
|
|
4371
4441
|
def test_stash_artifacts_build_command_runs_before_glob(tmp_path: Path) -> None:
|
|
4372
4442
|
"""build_command is run in the worktree before the artifact glob (#1323 fix #3).
|
|
4373
4443
|
|
|
@@ -4432,6 +4502,7 @@ def test_stash_artifacts_build_command_runs_before_glob(tmp_path: Path) -> None:
|
|
|
4432
4502
|
assert "pre-stash build" in log_text
|
|
4433
4503
|
|
|
4434
4504
|
|
|
4505
|
+
@_build_command_posix_only
|
|
4435
4506
|
def test_stash_artifacts_build_command_logged_on_failure(tmp_path: Path) -> None:
|
|
4436
4507
|
"""A failing build_command is logged but does not abort the stash (#1323 fix #3).
|
|
4437
4508
|
|
|
@@ -16,6 +16,7 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import json
|
|
18
18
|
import subprocess
|
|
19
|
+
import sys
|
|
19
20
|
from pathlib import Path
|
|
20
21
|
|
|
21
22
|
import pytest
|
|
@@ -47,10 +48,6 @@ def repo_local_only(tmp_path: Path) -> Path:
|
|
|
47
48
|
return repo
|
|
48
49
|
|
|
49
50
|
|
|
50
|
-
def _shell_quote(s: str) -> str:
|
|
51
|
-
return "'" + s.replace("'", "'\\''") + "'"
|
|
52
|
-
|
|
53
|
-
|
|
54
51
|
# The #1563 evidence, verbatim shape.
|
|
55
52
|
_ERROR_RESULT_EVENT = {
|
|
56
53
|
"type": "result",
|
|
@@ -81,11 +78,18 @@ _OK_RESULT_EVENT = {
|
|
|
81
78
|
}
|
|
82
79
|
|
|
83
80
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
81
|
+
# Portable replacement for the POSIX-only `["/bin/sh", "-c", "printf ..."]`
|
|
82
|
+
# fake worker shape (#2725/#2843): `_print_lines_argv` runs the equivalent via
|
|
83
|
+
# `sys.executable -c` instead of a shell — no `/bin/sh` dependency, which is
|
|
84
|
+
# absent on Windows and was failing every test in this file at spawn time
|
|
85
|
+
# regardless of the `_maybe_bash_wrap` default (#2843's OTHER root cause,
|
|
86
|
+
# independent of the bash-wrap-default fix in `coord/agent.py`).
|
|
87
|
+
def _print_lines_argv(*events: dict, exit_code: int = 0) -> list[str]:
|
|
88
|
+
"""One NDJSON line per *event*, printed via a real python child process."""
|
|
89
|
+
script = "".join(f"print({json.dumps(e)!r})\n" for e in events)
|
|
90
|
+
if exit_code:
|
|
91
|
+
script += f"import sys; sys.exit({exit_code})\n"
|
|
92
|
+
return [sys.executable, "-c", script]
|
|
89
93
|
|
|
90
94
|
|
|
91
95
|
def test_terminal_api_error_recorded_failed(
|
|
@@ -100,10 +104,7 @@ def test_terminal_api_error_recorded_failed(
|
|
|
100
104
|
repos=["api"],
|
|
101
105
|
repo_paths={"api": str(repo_local_only)},
|
|
102
106
|
state_dir=tmp_path / "state",
|
|
103
|
-
worker_command=lambda spec:
|
|
104
|
-
"/bin/sh", "-c",
|
|
105
|
-
_printf_lines(_INIT_EVENT, _ERROR_RESULT_EVENT),
|
|
106
|
-
],
|
|
107
|
+
worker_command=lambda spec: _print_lines_argv(_INIT_EVENT, _ERROR_RESULT_EVENT),
|
|
107
108
|
)
|
|
108
109
|
spec = AssignmentSpec(
|
|
109
110
|
repo_name="api",
|
|
@@ -134,10 +135,7 @@ def test_terminal_api_error_appears_in_log(
|
|
|
134
135
|
repos=["api"],
|
|
135
136
|
repo_paths={"api": str(repo_local_only)},
|
|
136
137
|
state_dir=tmp_path / "state",
|
|
137
|
-
worker_command=lambda spec:
|
|
138
|
-
"/bin/sh", "-c",
|
|
139
|
-
_printf_lines(_INIT_EVENT, _ERROR_RESULT_EVENT),
|
|
140
|
-
],
|
|
138
|
+
worker_command=lambda spec: _print_lines_argv(_INIT_EVENT, _ERROR_RESULT_EVENT),
|
|
141
139
|
)
|
|
142
140
|
spec = AssignmentSpec(
|
|
143
141
|
repo_name="api",
|
|
@@ -168,10 +166,7 @@ def test_normal_successful_result_still_done(
|
|
|
168
166
|
repos=["api"],
|
|
169
167
|
repo_paths={"api": str(repo_local_only)},
|
|
170
168
|
state_dir=tmp_path / "state",
|
|
171
|
-
worker_command=lambda spec:
|
|
172
|
-
"/bin/sh", "-c",
|
|
173
|
-
_printf_lines(_INIT_EVENT, _OK_RESULT_EVENT),
|
|
174
|
-
],
|
|
169
|
+
worker_command=lambda spec: _print_lines_argv(_INIT_EVENT, _OK_RESULT_EVENT),
|
|
175
170
|
)
|
|
176
171
|
spec = AssignmentSpec(
|
|
177
172
|
repo_name="api",
|
|
@@ -203,10 +198,7 @@ def test_transient_error_then_internal_retry_success_still_done(
|
|
|
203
198
|
repos=["api"],
|
|
204
199
|
repo_paths={"api": str(repo_local_only)},
|
|
205
200
|
state_dir=tmp_path / "state",
|
|
206
|
-
worker_command=lambda spec:
|
|
207
|
-
"/bin/sh", "-c",
|
|
208
|
-
_printf_lines(_INIT_EVENT, _ERROR_RESULT_EVENT, _OK_RESULT_EVENT),
|
|
209
|
-
],
|
|
201
|
+
worker_command=lambda spec: _print_lines_argv(_INIT_EVENT, _ERROR_RESULT_EVENT, _OK_RESULT_EVENT),
|
|
210
202
|
)
|
|
211
203
|
spec = AssignmentSpec(
|
|
212
204
|
repo_name="api",
|
|
@@ -239,10 +231,7 @@ def test_terminal_api_error_with_nonzero_exit(
|
|
|
239
231
|
repos=["api"],
|
|
240
232
|
repo_paths={"api": str(repo_local_only)},
|
|
241
233
|
state_dir=tmp_path / "state",
|
|
242
|
-
worker_command=lambda spec:
|
|
243
|
-
"/bin/sh", "-c",
|
|
244
|
-
f"{_printf_lines(_INIT_EVENT, _ERROR_RESULT_EVENT)}; exit 1",
|
|
245
|
-
],
|
|
234
|
+
worker_command=lambda spec: _print_lines_argv(_INIT_EVENT, _ERROR_RESULT_EVENT, exit_code=1),
|
|
246
235
|
)
|
|
247
236
|
spec = AssignmentSpec(
|
|
248
237
|
repo_name="api",
|
|
@@ -275,10 +264,7 @@ def test_terminal_api_error_still_captures_claude_session_id(
|
|
|
275
264
|
repos=["api"],
|
|
276
265
|
repo_paths={"api": str(repo_local_only)},
|
|
277
266
|
state_dir=tmp_path / "state",
|
|
278
|
-
worker_command=lambda spec:
|
|
279
|
-
"/bin/sh", "-c",
|
|
280
|
-
_printf_lines(_INIT_EVENT, _ERROR_RESULT_EVENT),
|
|
281
|
-
],
|
|
267
|
+
worker_command=lambda spec: _print_lines_argv(_INIT_EVENT, _ERROR_RESULT_EVENT),
|
|
282
268
|
)
|
|
283
269
|
spec = AssignmentSpec(
|
|
284
270
|
repo_name="api",
|
|
@@ -325,10 +311,7 @@ def test_reap_parses_the_terminal_log_only_once(
|
|
|
325
311
|
repos=["api"],
|
|
326
312
|
repo_paths={"api": str(repo_local_only)},
|
|
327
313
|
state_dir=tmp_path / "state",
|
|
328
|
-
worker_command=lambda spec:
|
|
329
|
-
"/bin/sh", "-c",
|
|
330
|
-
_printf_lines(_INIT_EVENT, _ERROR_RESULT_EVENT),
|
|
331
|
-
],
|
|
314
|
+
worker_command=lambda spec: _print_lines_argv(_INIT_EVENT, _ERROR_RESULT_EVENT),
|
|
332
315
|
)
|
|
333
316
|
spec = AssignmentSpec(
|
|
334
317
|
repo_name="api",
|
|
@@ -24,6 +24,7 @@ from coord.agent_update import (
|
|
|
24
24
|
perform_update,
|
|
25
25
|
rollback,
|
|
26
26
|
)
|
|
27
|
+
from coord.dirlink import is_dir_link
|
|
27
28
|
from coord.platform_paths import venv_bin, venv_exe, venv_pip, venv_python
|
|
28
29
|
|
|
29
30
|
#: #2684 (W4): `current_slot()`/`ensure_symlink_layout()` call `Path.resolve()`
|
|
@@ -159,7 +160,7 @@ class TestSymlinkLayout:
|
|
|
159
160
|
active = ensure_symlink_layout(venv_dir)
|
|
160
161
|
|
|
161
162
|
assert active == tmp_path / ".coord-venv.blue"
|
|
162
|
-
assert venv_dir
|
|
163
|
+
assert is_dir_link(venv_dir)
|
|
163
164
|
assert _same_path(current_slot(venv_dir), active)
|
|
164
165
|
assert (venv_dir / "marker").read_text() == "original install\n"
|
|
165
166
|
|