code-coordinator 0.5.642__tar.gz → 0.5.644__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.642 → code_coordinator-0.5.644}/PKG-INFO +1 -1
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/PKG-INFO +1 -1
- code_coordinator-0.5.644/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agent.py +116 -3
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/diagnose.py +10 -1
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/failure_class.py +39 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notify.py +9 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/reconcile.py +73 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/state.py +45 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/COST_DISCIPLINE.md +9 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_base_checkout_restore.py +84 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_diagnose.py +66 -4
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_failure_class.py +20 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notify.py +124 -16
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke.py +75 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_state.py +29 -0
- code_coordinator-0.5.642/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/.gitignore +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/CLAUDE.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/GOAL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/LICENSE +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/MANIFEST.in +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/README.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/__init__.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/app_drive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/app_drive_daemon.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/audit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/backup.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/block_log.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/board_service.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/brain.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/briefing_lessons.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/claim.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/cli.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/client.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/codegen.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/app_drive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/smoke.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/comments.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/config.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dao.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/db.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/deps.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/drive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/events.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/filelock.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/freshness.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gates.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/goal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/gui_lane_preflight.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/context.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/models.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/render.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/health/units.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/hooks.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/interactive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/key_spec.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/models.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/native_fs_wait.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/native_pixels.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/network.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/nightly_runner.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/nightly_smoke.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/nightly_status.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/nightly_store.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/openapi.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/parentage.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/plans.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/prereview_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/progress.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/release_window.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/reports.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/review.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/self_health.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/shell_exec_wrap.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/smoke.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/split_work.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/sql.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/test_author.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/test_report.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/upstream_gaps.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/usage.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/install-agent.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/pyproject.toml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/comment_cruft.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/setup.cfg +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/__init__.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/backends.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/conftest.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_graph_refresh.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_app_drive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_nightly_status.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_briefing_lessons.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_inject_board_less.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_smoke_nightly.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_smoke_nightly_sweep.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_nightly.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_client.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_comment_cruft.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_prereview_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_db.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_events.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_init.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_key_spec.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_merge_verification.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_models.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_models_pinned_1650.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_native_fs_wait.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_native_pixels.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_network.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_nightly_runner.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_nightly_smoke.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_nightly_status.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_nightly_store.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_no_eligible_host_3600.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plain_runner_smoke_3673.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_prereview_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_session.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke_plain_runner_3673.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_split.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_upstream_gaps.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.642 → code_coordinator-0.5.644}/tests/write_parity.py +0 -0
|
@@ -2137,6 +2137,18 @@ def _sanitize_branch(branch: str) -> str:
|
|
|
2137
2137
|
# worktree. The captured group is the conflicting worktree's path.
|
|
2138
2138
|
_WT_COLLISION_RE = re.compile(r"already used by worktree at '([^']+)'")
|
|
2139
2139
|
|
|
2140
|
+
# #3704: the *other* shape git raises for a branch-name collision — "fatal: a
|
|
2141
|
+
# branch named '<branch>' already exists". `git worktree add -b <branch> ...`
|
|
2142
|
+
# raises this whenever the branch ref exists at all, whether or not it is
|
|
2143
|
+
# currently checked out anywhere — unlike `_WT_COLLISION_RE` above, which only
|
|
2144
|
+
# fires when something has it checked out. A retried smoke-fix/test-fix
|
|
2145
|
+
# dispatch picks the same deterministic branch name as its failed predecessor;
|
|
2146
|
+
# if that predecessor's worktree was torn down without the branch itself being
|
|
2147
|
+
# deleted (`git worktree remove` never deletes the branch), the retry hits
|
|
2148
|
+
# this exact message and — before this fix — crashed instead of recovering.
|
|
2149
|
+
# The captured group is the branch name, not a path.
|
|
2150
|
+
_WT_BRANCH_EXISTS_RE = re.compile(r"a branch named '([^']+)' already exists")
|
|
2151
|
+
|
|
2140
2152
|
# Build-intermediate file suffixes that are never useful stash artifacts.
|
|
2141
2153
|
# Cargo produces dozens of *.rcgu.o incremental-codegen objects per build
|
|
2142
2154
|
# (e.g. `tui_selection-<hash>.<unit>.rcgu.o`) — Path.suffix on these returns
|
|
@@ -2765,6 +2777,29 @@ def _parse_worktree_porcelain(output: str) -> list[dict[str, str]]:
|
|
|
2765
2777
|
return worktrees
|
|
2766
2778
|
|
|
2767
2779
|
|
|
2780
|
+
def _worktree_path_for_branch(repo_path: Path, branch_name: str) -> str | None:
|
|
2781
|
+
"""Path of the worktree currently holding *branch_name*, or ``None`` (#3704).
|
|
2782
|
+
|
|
2783
|
+
Git's "a branch named '<branch>' already exists" error (matched by
|
|
2784
|
+
:data:`_WT_BRANCH_EXISTS_RE`) names the *branch*, not a worktree path —
|
|
2785
|
+
unlike :data:`_WT_COLLISION_RE`'s "already used by worktree at '<path>'",
|
|
2786
|
+
which hands :func:`_git_worktree_add` the path directly. This resolves the
|
|
2787
|
+
same thing by scanning ``git worktree list --porcelain`` for an entry
|
|
2788
|
+
whose branch matches. ``None`` means the branch ref exists but nothing has
|
|
2789
|
+
it checked out anywhere — the common case for a retried dispatch whose
|
|
2790
|
+
prior attempt's worktree was already cleaned up without the branch itself
|
|
2791
|
+
being deleted.
|
|
2792
|
+
"""
|
|
2793
|
+
try:
|
|
2794
|
+
output = _git(repo_path, "worktree", "list", "--porcelain")
|
|
2795
|
+
except _GitError:
|
|
2796
|
+
return None
|
|
2797
|
+
for wt in _parse_worktree_porcelain(output):
|
|
2798
|
+
if wt.get("branch", "") == branch_name:
|
|
2799
|
+
return wt.get("worktree")
|
|
2800
|
+
return None
|
|
2801
|
+
|
|
2802
|
+
|
|
2768
2803
|
def _is_same_path(candidate: str, resolved_target: Path) -> bool:
|
|
2769
2804
|
"""True when *candidate* points at the same directory as *resolved_target*.
|
|
2770
2805
|
|
|
@@ -3443,15 +3478,83 @@ def _git_worktree_add(
|
|
|
3443
3478
|
*default_branch* is deliberately optional and the remedy is skipped
|
|
3444
3479
|
without it: the helper has to know where to put the base, and a caller
|
|
3445
3480
|
that cannot say keeps #1693's behaviour unchanged (refuse and re-raise).
|
|
3481
|
+
|
|
3482
|
+
#3704: git raises a *second* message shape for a branch-name collision —
|
|
3483
|
+
"a branch named '<branch>' already exists" — whenever the ``-b <branch>``
|
|
3484
|
+
form is used and the branch ref exists at all, checked out anywhere or
|
|
3485
|
+
not. A retried smoke-fix/test-fix dispatch deterministically picks the
|
|
3486
|
+
same branch name as its failed predecessor, so if that predecessor's
|
|
3487
|
+
worktree was already torn down (leaving a stale branch ref behind — ``git
|
|
3488
|
+
worktree remove`` never deletes the branch), the retry hits this exact
|
|
3489
|
+
message. It is resolved the same way: look up where the branch is
|
|
3490
|
+
checked out (if anywhere) via :func:`_worktree_path_for_branch` and fall
|
|
3491
|
+
into the identical main-checkout-restore / linked-worktree-evict logic
|
|
3492
|
+
below. Nothing checked out anywhere is the common case — the stale ref
|
|
3493
|
+
is just deleted and the add is retried once.
|
|
3446
3494
|
"""
|
|
3495
|
+
# #3704: set only when the failure was "a branch named '<branch>' already
|
|
3496
|
+
# exists" — the ``-b`` form's signal that it wants a brand-new branch at
|
|
3497
|
+
# this name, never that it wants to reuse the existing one. Whatever
|
|
3498
|
+
# clears the collision below (restoring the base checkout, evicting a
|
|
3499
|
+
# linked worktree) only moves things *off* the branch; it never deletes
|
|
3500
|
+
# the ref, so without this the retry would hit the identical error again.
|
|
3501
|
+
pending_branch_delete: str | None = None
|
|
3502
|
+
|
|
3503
|
+
def _delete_pending_branch() -> None:
|
|
3504
|
+
"""Delete *pending_branch_delete*, if set, once its checkout is clear.
|
|
3505
|
+
|
|
3506
|
+
Best-effort: a failure here just means the retry below hits the same
|
|
3507
|
+
"already exists" error and surfaces it as a real ``_GitError`` —
|
|
3508
|
+
exactly like every other irrecoverable case in this function.
|
|
3509
|
+
"""
|
|
3510
|
+
if pending_branch_delete is None:
|
|
3511
|
+
return
|
|
3512
|
+
try:
|
|
3513
|
+
_git(repo_path, "branch", "-D", pending_branch_delete)
|
|
3514
|
+
except _GitError:
|
|
3515
|
+
pass
|
|
3516
|
+
|
|
3447
3517
|
try:
|
|
3448
3518
|
_git(repo_path, "worktree", "add", *add_args)
|
|
3449
3519
|
return
|
|
3450
3520
|
except _GitError as exc:
|
|
3451
3521
|
m = _WT_COLLISION_RE.search(str(exc))
|
|
3452
|
-
if
|
|
3453
|
-
|
|
3454
|
-
|
|
3522
|
+
if m:
|
|
3523
|
+
conflicting_path = m.group(1)
|
|
3524
|
+
else:
|
|
3525
|
+
m = _WT_BRANCH_EXISTS_RE.search(str(exc))
|
|
3526
|
+
if not m:
|
|
3527
|
+
raise # unrelated error — propagate unchanged
|
|
3528
|
+
branch_name = m.group(1)
|
|
3529
|
+
conflicting_path = _worktree_path_for_branch(repo_path, branch_name)
|
|
3530
|
+
if conflicting_path is None:
|
|
3531
|
+
# #3704: the branch ref exists but nothing has it checked out
|
|
3532
|
+
# — e.g. a prior attempt's worktree was already cleaned up
|
|
3533
|
+
# without deleting the branch itself. Safe to delete the
|
|
3534
|
+
# stale ref outright and retry once.
|
|
3535
|
+
if log_path:
|
|
3536
|
+
_append_log_line(
|
|
3537
|
+
log_path,
|
|
3538
|
+
f"# worktree-add: branch {branch_name!r} already "
|
|
3539
|
+
f"exists but is not checked out in any worktree "
|
|
3540
|
+
f"(#3704) — deleting the stale ref and retrying\n",
|
|
3541
|
+
)
|
|
3542
|
+
try:
|
|
3543
|
+
_git(repo_path, "branch", "-D", branch_name)
|
|
3544
|
+
except _GitError as delete_exc:
|
|
3545
|
+
raise _GitError(
|
|
3546
|
+
f"cannot create a worktree for branch "
|
|
3547
|
+
f"{branch_name!r}: it already exists and could not "
|
|
3548
|
+
f"be deleted ({delete_exc})"
|
|
3549
|
+
) from exc
|
|
3550
|
+
# One retry only — raises if it fails again.
|
|
3551
|
+
_git(repo_path, "worktree", "add", *add_args)
|
|
3552
|
+
return
|
|
3553
|
+
# Checked out somewhere — fall into the main-checkout-restore /
|
|
3554
|
+
# linked-worktree-evict logic below, which clears the *checkout*.
|
|
3555
|
+
# The branch ref itself still needs deleting once that's done,
|
|
3556
|
+
# since the whole point of `-b` is a fresh branch (#3704).
|
|
3557
|
+
pending_branch_delete = branch_name
|
|
3455
3558
|
original = exc
|
|
3456
3559
|
|
|
3457
3560
|
# #1693: refuse before removing. The base checkout is not a recoverable
|
|
@@ -3485,6 +3588,12 @@ def _git_worktree_add(
|
|
|
3485
3588
|
f"collision (#1694). Nothing was deleted. "
|
|
3486
3589
|
f"Retrying the add once.\n",
|
|
3487
3590
|
)
|
|
3591
|
+
# #3704: if the original error was "branch already
|
|
3592
|
+
# exists" (not the older "already used by worktree"),
|
|
3593
|
+
# the branch ref itself is still there even though the
|
|
3594
|
+
# base checkout just moved off it — delete it now that
|
|
3595
|
+
# nothing has it checked out.
|
|
3596
|
+
_delete_pending_branch()
|
|
3488
3597
|
# One retry only — raises if it fails again.
|
|
3489
3598
|
_git(repo_path, "worktree", "add", *add_args)
|
|
3490
3599
|
return
|
|
@@ -3519,6 +3628,10 @@ def _git_worktree_add(
|
|
|
3519
3628
|
# to be removable here. Anything else is refused and the retry below
|
|
3520
3629
|
# raises the real error.
|
|
3521
3630
|
)
|
|
3631
|
+
# #3704: as above — a "branch already exists" origin means the branch
|
|
3632
|
+
# ref outlives the worktree that just got evicted, and needs its own
|
|
3633
|
+
# deletion before the retry can succeed.
|
|
3634
|
+
_delete_pending_branch()
|
|
3522
3635
|
# One retry only — raises if it fails again.
|
|
3523
3636
|
_git(repo_path, "worktree", "add", *add_args)
|
|
3524
3637
|
|
|
@@ -1441,10 +1441,19 @@ def _recover_test(
|
|
|
1441
1441
|
from coord.reconcile import ( # noqa: PLC0415
|
|
1442
1442
|
propagate_smoke_terminal_failure,
|
|
1443
1443
|
)
|
|
1444
|
-
|
|
1444
|
+
from coord.state import load_assignment_exit_code # noqa: PLC0415
|
|
1445
|
+
|
|
1446
|
+
# #3705: the board projection carries no `exit_code`, so read the
|
|
1447
|
+
# smoke child's recorded exit status directly — without it every
|
|
1448
|
+
# reason-less failure would reclassify as a silent #1605 death and
|
|
1449
|
+
# earn a bounded retry instead of a work failure. A `cancelled`
|
|
1450
|
+
# row is the operator's own `coord stop`, whose exit status is the
|
|
1451
|
+
# kill signal rather than a verdict on the code under test.
|
|
1445
1452
|
propagate_smoke_terminal_failure(
|
|
1446
1453
|
parent_assignment_id=latest.assignment_id,
|
|
1447
1454
|
failure_reason=smoke.failure_reason,
|
|
1455
|
+
operator_cancelled=(smoke.status or "") == "cancelled",
|
|
1456
|
+
exit_code=load_assignment_exit_code(smoke.assignment_id),
|
|
1448
1457
|
)
|
|
1449
1458
|
res.actions_taken.append(
|
|
1450
1459
|
f"resolved stuck test_state='running' from smoke child "
|
|
@@ -98,6 +98,11 @@ KIND_NETWORK = "network"
|
|
|
98
98
|
#: diagnosis of a lost Test-stage leg, never a verdict about the code
|
|
99
99
|
#: under test.
|
|
100
100
|
KIND_INFRA = "infra"
|
|
101
|
+
#: #3705: a Test-stage worker died with literally no `failure_reason` to
|
|
102
|
+
#: classify — not "classified as work because the text didn't match any
|
|
103
|
+
#: environmental pattern" (that case has real diagnostic text and stays
|
|
104
|
+
#: `KIND_WORK`), but zero evidence at all. See :func:`silent_test_death`.
|
|
105
|
+
KIND_SILENT = "silent"
|
|
101
106
|
KIND_WORK = "work"
|
|
102
107
|
|
|
103
108
|
#: HTTP statuses from the Claude API that mean "the provider, not the work".
|
|
@@ -353,6 +358,40 @@ def _usage_limit(reset_at_raw: str | None, signal: str) -> FailureClassification
|
|
|
353
358
|
)
|
|
354
359
|
|
|
355
360
|
|
|
361
|
+
def silent_test_death() -> FailureClassification:
|
|
362
|
+
"""#3705: classification for a Test-stage worker that died reporting
|
|
363
|
+
literally nothing — no usage-limit/API/network/infra signal and no
|
|
364
|
+
``failure_reason`` text at all for :func:`classify_failure` to have
|
|
365
|
+
scanned in the first place (a dead agent, a killed process group, a
|
|
366
|
+
terminal API error with the summary itself lost — the #1605 class).
|
|
367
|
+
|
|
368
|
+
Deliberately **not** a branch inside :func:`classify_failure`: that
|
|
369
|
+
function's "everything else is WORK, including no evidence" rule is
|
|
370
|
+
correct for a failure that has *some* terminal text which simply didn't
|
|
371
|
+
match an environmental pattern (that IS a real, if unrecognized, work
|
|
372
|
+
failure with diagnostic content worth handing a fix worker). This is
|
|
373
|
+
the narrower case of *zero* content — nothing to classify, let alone
|
|
374
|
+
hand to a fix worker — which only
|
|
375
|
+
:func:`coord.reconcile.propagate_smoke_terminal_failure` can tell apart
|
|
376
|
+
from the ordinary case (it alone sees whether ``failure_reason`` itself
|
|
377
|
+
was ever populated). Classified ``ENVIRONMENTAL`` so it gets the same
|
|
378
|
+
bounded clear-and-retry-then-park treatment as a usage limit or network
|
|
379
|
+
drop — a silent death is no more evidence of a code defect than either
|
|
380
|
+
of those, and parking (never a blind ``coord fix``) is the correct
|
|
381
|
+
escalation once the shared retry budget is exhausted.
|
|
382
|
+
"""
|
|
383
|
+
return FailureClassification(
|
|
384
|
+
failure_class=ENVIRONMENTAL,
|
|
385
|
+
kind=KIND_SILENT,
|
|
386
|
+
reason=(
|
|
387
|
+
"environmental (silent #1605 death): the Test-stage worker "
|
|
388
|
+
"died without recording any reason — no usage-limit, API, "
|
|
389
|
+
"network, or infra signal, and no terminal output at all"
|
|
390
|
+
),
|
|
391
|
+
signal=None,
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
|
|
356
395
|
def _reset_at_from_reason(reason: str | None) -> str | None:
|
|
357
396
|
"""Pull the raw reset string back out of a stamped ``failure_reason``."""
|
|
358
397
|
if not is_usage_limit_reason(reason):
|
|
@@ -4623,17 +4623,26 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
4623
4623
|
# can protect a still-live/already-passed sibling partition
|
|
4624
4624
|
# from a false aggregate failure instead of folding this
|
|
4625
4625
|
# leg's cancellation straight into the parent's verdict.
|
|
4626
|
+
# #3705: `exit_code` is the deciding evidence for the
|
|
4627
|
+
# silent-death branch — a leg that actually ran and exited
|
|
4628
|
+
# non-zero is a genuine work failure even with no classified
|
|
4629
|
+
# reason text, while a leg whose process left no exit status
|
|
4630
|
+
# at all is the #1605 class that gets a bounded retry. Same
|
|
4631
|
+
# forwarding as `coord.reconcile`'s own call site, so both
|
|
4632
|
+
# surfaces answer "silent or genuine?" identically.
|
|
4626
4633
|
propagate_smoke_terminal_failure(
|
|
4627
4634
|
parent_assignment_id=transition.assignment_id,
|
|
4628
4635
|
failure_reason=_failure_reason,
|
|
4629
4636
|
fanout_parent_id=parent_id,
|
|
4630
4637
|
operator_cancelled=entry.get("status") == "cancelled",
|
|
4638
|
+
exit_code=transition.exit_code,
|
|
4631
4639
|
)
|
|
4632
4640
|
finalize_smoke_fanout(parent_id)
|
|
4633
4641
|
else:
|
|
4634
4642
|
propagate_smoke_terminal_failure(
|
|
4635
4643
|
parent_assignment_id=parent_id,
|
|
4636
4644
|
failure_reason=_failure_reason,
|
|
4645
|
+
exit_code=transition.exit_code,
|
|
4637
4646
|
)
|
|
4638
4647
|
elif transition.event == EVENT_COMPLETION:
|
|
4639
4648
|
# #2188: a `deliverable:analysis` issue that legitimately ended with
|
|
@@ -590,6 +590,7 @@ def reconcile_completed_assignments(
|
|
|
590
590
|
propagate_smoke_terminal_failure(
|
|
591
591
|
parent_assignment_id=a.review_of_assignment_id,
|
|
592
592
|
failure_reason=_failure_reason,
|
|
593
|
+
exit_code=entry.get("exit_code"),
|
|
593
594
|
)
|
|
594
595
|
|
|
595
596
|
# #666 Gap A: best-effort cost/token capture from the agent completed
|
|
@@ -940,9 +941,14 @@ def _environmental_cause_phrase(classification: "FailureClassification") -> str:
|
|
|
940
941
|
KIND_API_ERROR,
|
|
941
942
|
KIND_INFRA,
|
|
942
943
|
KIND_NETWORK,
|
|
944
|
+
KIND_SILENT,
|
|
943
945
|
KIND_USAGE_LIMIT,
|
|
944
946
|
)
|
|
945
947
|
|
|
948
|
+
if classification.kind == KIND_SILENT:
|
|
949
|
+
# #3705: a Test-stage worker that died reporting nothing at all —
|
|
950
|
+
# not a provider signal, just no diagnostic to hand anyone.
|
|
951
|
+
return "a Test-stage worker repeatedly dying with no reason recorded (#1605)"
|
|
946
952
|
if classification.kind == KIND_USAGE_LIMIT:
|
|
947
953
|
return "an exhausted account usage limit"
|
|
948
954
|
if classification.kind == KIND_API_ERROR:
|
|
@@ -969,6 +975,7 @@ def propagate_smoke_terminal_failure(
|
|
|
969
975
|
environmental: bool | None = None,
|
|
970
976
|
fanout_parent_id: str | None = None,
|
|
971
977
|
operator_cancelled: bool = False,
|
|
978
|
+
exit_code: int | None = None,
|
|
972
979
|
) -> None:
|
|
973
980
|
"""#1605: resolve a work row's ``test_state`` when its Test-stage
|
|
974
981
|
(``type="smoke"``) child dies without ever reporting pass/fail.
|
|
@@ -1036,6 +1043,30 @@ def propagate_smoke_terminal_failure(
|
|
|
1036
1043
|
``test_state="failed"`` exactly like a normal non-zero-exit smoke
|
|
1037
1044
|
completion already does (`coord/notify.py`'s completion handler), so
|
|
1038
1045
|
the existing bounded `coord fix` loop picks it up from there.
|
|
1046
|
+
* **silent** (#3705: *failure_reason* itself is empty — no usage-limit,
|
|
1047
|
+
API, network, or infra token to classify, because there is no text at
|
|
1048
|
+
all) — this is the #1605 class the module docstring above describes,
|
|
1049
|
+
and it is treated like **environmental**, not **work**: there is
|
|
1050
|
+
nothing for a `coord fix` worker to act on, so dispatching one only
|
|
1051
|
+
adds a full Work→Test→Review cycle onto a row whose original Work may
|
|
1052
|
+
already be approved, for zero actionable content. Reclassified via
|
|
1053
|
+
:func:`coord.failure_class.silent_test_death` and folded into the same
|
|
1054
|
+
bounded clear-and-retry-then-park machinery as a genuine environmental
|
|
1055
|
+
death, sharing its budget and tally. Deliberately distinct from
|
|
1056
|
+
**work**'s "no RECOGNIZED signal" case, which still has real
|
|
1057
|
+
diagnostic text worth a fix worker's time and keeps its current
|
|
1058
|
+
``test_state="failed"`` handling unchanged.
|
|
1059
|
+
|
|
1060
|
+
*exit_code* (#3705) is the deciding evidence for that **silent** branch,
|
|
1061
|
+
and every automatic caller must forward it: the dying worker's own
|
|
1062
|
+
process exit status, when the agent recorded one. A non-zero exit means
|
|
1063
|
+
the worker ran and returned an error — real evidence of a work failure,
|
|
1064
|
+
even with no reason text — so only ``exit_code in {0, None}`` reclassifies
|
|
1065
|
+
as silent. *operator_cancelled* overrides this, since a `coord stop`
|
|
1066
|
+
kills the process group and its exit status reflects the operator's
|
|
1067
|
+
signal rather than the code under test. Leaving *exit_code* unset means
|
|
1068
|
+
"no exit status is known", which is itself the #1605 shape, so a caller
|
|
1069
|
+
that CAN see one and omits it would reclassify genuine failures as silent.
|
|
1039
1070
|
|
|
1040
1071
|
*environmental* (#2275) overrides that classification when the CALLER
|
|
1041
1072
|
already knows the answer. Default ``None`` means "classify from
|
|
@@ -1134,6 +1165,48 @@ def propagate_smoke_terminal_failure(
|
|
|
1134
1165
|
if environmental is None:
|
|
1135
1166
|
is_environmental = classification.is_environmental
|
|
1136
1167
|
cause = classification.reason
|
|
1168
|
+
if (
|
|
1169
|
+
not is_environmental
|
|
1170
|
+
and not (failure_reason or "").strip()
|
|
1171
|
+
and (operator_cancelled or exit_code in (0, None))
|
|
1172
|
+
):
|
|
1173
|
+
# #3705: `classify_failure` correctly calls this WORK — its own
|
|
1174
|
+
# "no evidence at all defaults to WORK" rule — but that rule is
|
|
1175
|
+
# about an UNRECOGNIZED signal, not an ABSENT one. There is a
|
|
1176
|
+
# real difference between "the worker's own terminal text didn't
|
|
1177
|
+
# match any environmental pattern" (real diagnostic content, a
|
|
1178
|
+
# genuine work failure worth a fix worker's time) and "there is
|
|
1179
|
+
# no `failure_reason` text at all" (a dead agent, a killed
|
|
1180
|
+
# process group — the #1605 class this function exists for,
|
|
1181
|
+
# with nothing for a fix worker to act on). Only this caller can
|
|
1182
|
+
# tell the two apart, since only it sees whether
|
|
1183
|
+
# *failure_reason* itself was ever populated.
|
|
1184
|
+
#
|
|
1185
|
+
# The additional *exit_code* guard keeps a non-zero exit code
|
|
1186
|
+
# (e.g. exit_code=1: the `claude -p` process actually ran and
|
|
1187
|
+
# returned an error) as a genuine WORK failure even when the
|
|
1188
|
+
# agent captured no classified reason text — a non-zero exit IS
|
|
1189
|
+
# a signal, just one without a human-readable reason string.
|
|
1190
|
+
# Only `exit_code in {0, None}` qualifies as truly silent.
|
|
1191
|
+
#
|
|
1192
|
+
# *operator_cancelled* overrides that guard: a `coord stop` kills
|
|
1193
|
+
# the worker's process group, so its exit status reports the
|
|
1194
|
+
# OPERATOR'S signal, not a verdict on the code under test. Every
|
|
1195
|
+
# cancellation is therefore silent by construction, whatever exit
|
|
1196
|
+
# code the kill happened to leave behind — the same reasoning as
|
|
1197
|
+
# the sibling-protection branch above, applied to a solo leg that
|
|
1198
|
+
# has no live sibling left to protect.
|
|
1199
|
+
# Treat all of the above like an environmental death: bounded
|
|
1200
|
+
# clear-and-retry of the Test stage, parking (never a blind
|
|
1201
|
+
# `coord fix`) once the shared #3315 budget is exhausted —
|
|
1202
|
+
# instead of ever recording a `test_state="failed"` work verdict
|
|
1203
|
+
# with a synthetic placeholder reason and no actual failure
|
|
1204
|
+
# behind it.
|
|
1205
|
+
from coord.failure_class import silent_test_death # noqa: PLC0415
|
|
1206
|
+
|
|
1207
|
+
classification = silent_test_death()
|
|
1208
|
+
is_environmental = True
|
|
1209
|
+
cause = classification.reason
|
|
1137
1210
|
else:
|
|
1138
1211
|
is_environmental = bool(environmental)
|
|
1139
1212
|
cause = failure_reason or classification.reason
|
|
@@ -4587,6 +4587,51 @@ def load_assignment_test_reason(assignment_id: str) -> str | None:
|
|
|
4587
4587
|
return row["test_reason"] if hasattr(row, "keys") else row[0]
|
|
4588
4588
|
|
|
4589
4589
|
|
|
4590
|
+
def load_assignment_exit_code(assignment_id: str) -> int | None:
|
|
4591
|
+
"""#3705: the recorded process ``exit_code`` for one assignment.
|
|
4592
|
+
|
|
4593
|
+
The single-row read that lets a caller holding only an
|
|
4594
|
+
:class:`coord.models.Assignment` (whose projection carries no
|
|
4595
|
+
``exit_code``) answer "did this worker actually run and return an error?"
|
|
4596
|
+
— the deciding evidence
|
|
4597
|
+
:func:`coord.reconcile.propagate_smoke_terminal_failure` needs to tell a
|
|
4598
|
+
genuine work failure from a silent #1605 death.
|
|
4599
|
+
|
|
4600
|
+
Same daemon-first, local-fallback routing as
|
|
4601
|
+
:func:`load_assignment_test_reason`. Returns ``None`` when the row is
|
|
4602
|
+
absent, the column is NULL (the agent recorded no exit status), or a
|
|
4603
|
+
remote read failed — all three mean "no exit status I can see", which is
|
|
4604
|
+
itself the silent shape, so callers must treat it as absence of evidence
|
|
4605
|
+
rather than as a successful exit.
|
|
4606
|
+
"""
|
|
4607
|
+
if not assignment_id:
|
|
4608
|
+
return None
|
|
4609
|
+
svc = _board_service()
|
|
4610
|
+
if svc is not None:
|
|
4611
|
+
try:
|
|
4612
|
+
from coord.client import fetch_assignment # noqa: PLC0415
|
|
4613
|
+
|
|
4614
|
+
row = fetch_assignment(svc, assignment_id)
|
|
4615
|
+
if row is not None:
|
|
4616
|
+
code = row.get("exit_code")
|
|
4617
|
+
return int(code) if code is not None else None
|
|
4618
|
+
return None
|
|
4619
|
+
except Exception: # noqa: BLE001 — degraded fallback, never blocking
|
|
4620
|
+
return None
|
|
4621
|
+
try:
|
|
4622
|
+
conn = get_connection()
|
|
4623
|
+
row = sql.execute(conn,
|
|
4624
|
+
"SELECT exit_code FROM assignments WHERE assignment_id=?",
|
|
4625
|
+
(assignment_id,),
|
|
4626
|
+
).fetchone()
|
|
4627
|
+
except Exception: # noqa: BLE001
|
|
4628
|
+
return None
|
|
4629
|
+
if row is None:
|
|
4630
|
+
return None
|
|
4631
|
+
code = row["exit_code"] if hasattr(row, "keys") else row[0]
|
|
4632
|
+
return int(code) if code is not None else None
|
|
4633
|
+
|
|
4634
|
+
|
|
4590
4635
|
def load_assignment_test_state(assignment_id: str) -> str | None:
|
|
4591
4636
|
"""#2244: the current ``test_state`` for one assignment.
|
|
4592
4637
|
|
|
@@ -41,6 +41,15 @@ Minimize direct code work in the coordinator — instead, write a good briefing
|
|
|
41
41
|
- **Catch platform violations at review time.** The adversarial reviewer should check for
|
|
42
42
|
platform-specific code in shared/cross-platform paths. Catching after merge costs an entire
|
|
43
43
|
round-trip.
|
|
44
|
+
- **One backend per issue for multi-backend repos (quadraui, vimcode).** A cross-backend
|
|
45
|
+
feature becomes a **seam issue** (shared trait methods + one headless backend, typically TUI)
|
|
46
|
+
plus **one issue per backend** (GTK, macOS, Windows). The seam issue touches only
|
|
47
|
+
`backend.rs`, `testing/`, the TUI painter, and `todo!()`-style stubs in the other backends
|
|
48
|
+
— never real painters for GTK/macOS/win. Each backend issue is verified only on its own
|
|
49
|
+
host. Filing a single issue that spans all backends triggers the full smoke fanout matrix,
|
|
50
|
+
balloons scope past 6 files, and has burned 3+ fix rounds without landing (quadraui#1539,
|
|
51
|
+
2026-10-14; quadraui#1476, 2026-10-10). **Check the target repo's CLAUDE.md before filing**
|
|
52
|
+
— quadraui's encodes this rule.
|
|
44
53
|
|
|
45
54
|
## Operator sessions: dispatch, don't do
|
|
46
55
|
|
|
@@ -308,6 +308,90 @@ def test_the_collision_retry_for_a_real_linked_worktree_still_works(
|
|
|
308
308
|
assert _current_branch(base) == "main", "the base was moved for no reason"
|
|
309
309
|
|
|
310
310
|
|
|
311
|
+
# ── #3704: git's *other* collision message — "a branch named '<branch>' ──────
|
|
312
|
+
# already exists" — raised by the plain ``-b`` form whenever the branch ref
|
|
313
|
+
# exists at all, checked out anywhere or not. A retried smoke-fix/test-fix
|
|
314
|
+
# dispatch picks the same branch name as its failed predecessor, so if that
|
|
315
|
+
# predecessor's worktree was already torn down (which never deletes the
|
|
316
|
+
# branch), the retry hits this exact message instead of "already used by
|
|
317
|
+
# worktree at ...". All three sub-cases below funnel into the identical
|
|
318
|
+
# recovery machinery above; the branch ref is deleted once nothing has it
|
|
319
|
+
# checked out, since `-b` always means "I want a fresh branch here".
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
def test_branch_exists_but_checked_out_nowhere_is_freed_and_retried(
|
|
323
|
+
repo_with_remote: Path, tmp_path: Path
|
|
324
|
+
) -> None:
|
|
325
|
+
"""The common case: a prior attempt's worktree was cleaned up, but `git
|
|
326
|
+
worktree remove` never deletes the branch it held — so the stale ref is
|
|
327
|
+
all that is left to collide with the retry."""
|
|
328
|
+
base = repo_with_remote
|
|
329
|
+
stale = tmp_path / "stale"
|
|
330
|
+
_run(base, "worktree", "add", "-b", "issue-3704-stale", str(stale))
|
|
331
|
+
_run(base, "worktree", "remove", str(stale))
|
|
332
|
+
assert _run(base, "branch", "--list", "issue-3704-stale"), "branch should linger"
|
|
333
|
+
|
|
334
|
+
log = tmp_path / "worker.log"
|
|
335
|
+
log.write_text("")
|
|
336
|
+
new_wt = tmp_path / "new-wt"
|
|
337
|
+
_git_worktree_add(
|
|
338
|
+
base,
|
|
339
|
+
["-b", "issue-3704-stale", str(new_wt)],
|
|
340
|
+
log_path=str(log),
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
assert new_wt.exists(), "the worktree add did not succeed after the remedy"
|
|
344
|
+
assert _current_branch(new_wt) == "issue-3704-stale"
|
|
345
|
+
assert "not checked out in any worktree" in log.read_text()
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
def test_branch_exists_in_a_linked_worktree_is_evicted_and_retried(
|
|
349
|
+
repo_with_remote: Path, tmp_path: Path
|
|
350
|
+
) -> None:
|
|
351
|
+
"""The branch is live in a linked worktree — evict it, same as #460/#1693,
|
|
352
|
+
then delete the now-unchecked-out ref so the `-b` retry can recreate it."""
|
|
353
|
+
base = repo_with_remote
|
|
354
|
+
linked = tmp_path / "linked"
|
|
355
|
+
_run(base, "worktree", "add", "-b", "issue-3704-linked", str(linked))
|
|
356
|
+
|
|
357
|
+
new_wt = tmp_path / "new-wt"
|
|
358
|
+
_git_worktree_add(
|
|
359
|
+
base,
|
|
360
|
+
["-b", "issue-3704-linked", str(new_wt)],
|
|
361
|
+
)
|
|
362
|
+
|
|
363
|
+
assert new_wt.exists(), "the worktree add did not succeed after the remedy"
|
|
364
|
+
assert not linked.exists(), "the stale linked worktree should have been evicted"
|
|
365
|
+
assert _current_branch(new_wt) == "issue-3704-linked"
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
def test_branch_exists_in_the_base_checkout_is_restored_and_retried(
|
|
369
|
+
repo_with_remote: Path, tmp_path: Path
|
|
370
|
+
) -> None:
|
|
371
|
+
"""The branch is checked out in the *base* checkout itself — move the base
|
|
372
|
+
off it non-destructively (#1694), then delete the ref it leaves behind so
|
|
373
|
+
the `-b` retry can recreate it fresh."""
|
|
374
|
+
base = repo_with_remote
|
|
375
|
+
_park(base, "issue-3704-parked")
|
|
376
|
+
log = tmp_path / "worker.log"
|
|
377
|
+
log.write_text("")
|
|
378
|
+
|
|
379
|
+
new_wt = tmp_path / "new-wt"
|
|
380
|
+
_git_worktree_add(
|
|
381
|
+
base,
|
|
382
|
+
["-b", "issue-3704-parked", str(new_wt)],
|
|
383
|
+
log_path=str(log),
|
|
384
|
+
default_branch="main",
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
assert new_wt.exists(), "the worktree add did not succeed after the remedy"
|
|
388
|
+
assert _current_branch(base) == "main", "base was not moved to the default branch"
|
|
389
|
+
assert _current_branch(new_wt) == "issue-3704-parked"
|
|
390
|
+
text = log.read_text()
|
|
391
|
+
assert "base checkout was parked on 'issue-3704-parked'" in text, text
|
|
392
|
+
assert "moved it to main" in text, text
|
|
393
|
+
|
|
394
|
+
|
|
311
395
|
# ── The helper's own contract ───────────────────────────────────────────────
|
|
312
396
|
|
|
313
397
|
|
|
@@ -1712,10 +1712,9 @@ def test_stuck_test_state_with_terminal_smoke_child_is_recovered(monkeypatch, co
|
|
|
1712
1712
|
calls: list[dict] = []
|
|
1713
1713
|
monkeypatch.setattr(
|
|
1714
1714
|
"coord.reconcile.propagate_smoke_terminal_failure",
|
|
1715
|
-
lambda
|
|
1716
|
-
{"parent_assignment_id": parent_assignment_id, "failure_reason": failure_reason}
|
|
1717
|
-
),
|
|
1715
|
+
lambda **kw: calls.append(kw),
|
|
1718
1716
|
)
|
|
1717
|
+
monkeypatch.setattr("coord.state.load_assignment_exit_code", lambda aid: None)
|
|
1719
1718
|
work = _assign(aid="w1", typ="work", status="done")
|
|
1720
1719
|
work.test_state = "running"
|
|
1721
1720
|
smoke = _assign(
|
|
@@ -1728,12 +1727,75 @@ def test_stuck_test_state_with_terminal_smoke_child_is_recovered(monkeypatch, co
|
|
|
1728
1727
|
|
|
1729
1728
|
assert any("test_state='running'" in f and "s1" in f for f in res.findings)
|
|
1730
1729
|
assert calls == [
|
|
1731
|
-
{
|
|
1730
|
+
{
|
|
1731
|
+
"parent_assignment_id": "w1",
|
|
1732
|
+
"failure_reason": "api_error: aborted_streaming",
|
|
1733
|
+
"operator_cancelled": False,
|
|
1734
|
+
"exit_code": None,
|
|
1735
|
+
}
|
|
1732
1736
|
]
|
|
1733
1737
|
assert any("resolved stuck test_state" in a for a in res.actions_taken)
|
|
1734
1738
|
assert res.recovered is True
|
|
1735
1739
|
|
|
1736
1740
|
|
|
1741
|
+
def test_stuck_test_state_forwards_the_smoke_child_exit_code(monkeypatch, config) -> None:
|
|
1742
|
+
"""#3705: a smoke child that ran and exited non-zero is a genuine work
|
|
1743
|
+
failure even with no reason text recorded, so the repair must forward the
|
|
1744
|
+
child's own exit status — the board projection does not carry it, and
|
|
1745
|
+
omitting it would reclassify the failure as a silent #1605 death and earn
|
|
1746
|
+
it a bounded Test-stage retry instead."""
|
|
1747
|
+
_stub(monkeypatch, session="dead")
|
|
1748
|
+
calls: list[dict] = []
|
|
1749
|
+
monkeypatch.setattr(
|
|
1750
|
+
"coord.reconcile.propagate_smoke_terminal_failure",
|
|
1751
|
+
lambda **kw: calls.append(kw),
|
|
1752
|
+
)
|
|
1753
|
+
monkeypatch.setattr(
|
|
1754
|
+
"coord.state.load_assignment_exit_code",
|
|
1755
|
+
lambda aid: 1 if aid == "s1" else None,
|
|
1756
|
+
)
|
|
1757
|
+
work = _assign(aid="w1", typ="work", status="done")
|
|
1758
|
+
work.test_state = "running"
|
|
1759
|
+
smoke = _assign(aid="s1", typ="smoke", status="failed", review_of="w1")
|
|
1760
|
+
board = Board(completed=[work, smoke])
|
|
1761
|
+
|
|
1762
|
+
diagnose.diagnose_stage(board, config, "api", 42, "test")
|
|
1763
|
+
|
|
1764
|
+
assert calls and calls[0]["exit_code"] == 1, (
|
|
1765
|
+
"the smoke child's recorded exit status must reach "
|
|
1766
|
+
f"propagate_smoke_terminal_failure — got {calls!r}"
|
|
1767
|
+
)
|
|
1768
|
+
assert calls[0]["operator_cancelled"] is False
|
|
1769
|
+
|
|
1770
|
+
|
|
1771
|
+
def test_stuck_test_state_marks_a_cancelled_smoke_child_operator_cancelled(
|
|
1772
|
+
monkeypatch, config
|
|
1773
|
+
) -> None:
|
|
1774
|
+
"""#3705/#3333: an operator `coord stop` leaves the smoke row `cancelled`
|
|
1775
|
+
and its exit status is the kill signal, not a verdict on the code under
|
|
1776
|
+
test — so the repair must flag the cancellation and keep the clear-and-retry
|
|
1777
|
+
treatment rather than letting the signal's exit code read as a work
|
|
1778
|
+
failure."""
|
|
1779
|
+
_stub(monkeypatch, session="dead")
|
|
1780
|
+
calls: list[dict] = []
|
|
1781
|
+
monkeypatch.setattr(
|
|
1782
|
+
"coord.reconcile.propagate_smoke_terminal_failure",
|
|
1783
|
+
lambda **kw: calls.append(kw),
|
|
1784
|
+
)
|
|
1785
|
+
monkeypatch.setattr("coord.state.load_assignment_exit_code", lambda aid: -15)
|
|
1786
|
+
work = _assign(aid="w1", typ="work", status="done")
|
|
1787
|
+
work.test_state = "running"
|
|
1788
|
+
smoke = _assign(aid="s1", typ="smoke", status="cancelled", review_of="w1")
|
|
1789
|
+
board = Board(completed=[work, smoke])
|
|
1790
|
+
|
|
1791
|
+
diagnose.diagnose_stage(board, config, "api", 42, "test")
|
|
1792
|
+
|
|
1793
|
+
assert calls and calls[0]["operator_cancelled"] is True, (
|
|
1794
|
+
f"a cancelled smoke child must be reported as operator-cancelled — got {calls!r}"
|
|
1795
|
+
)
|
|
1796
|
+
assert calls[0]["exit_code"] == -15
|
|
1797
|
+
|
|
1798
|
+
|
|
1737
1799
|
def test_stuck_test_state_dry_run_reports_without_writing(monkeypatch, config) -> None:
|
|
1738
1800
|
_stub(monkeypatch, session="dead")
|
|
1739
1801
|
|