code-coordinator 0.5.492__tar.gz → 0.5.494__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.492 → code_coordinator-0.5.494}/PKG-INFO +1 -1
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/drive_queue.py +281 -49
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/db.py +123 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/merge_queue.py +14 -6
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/state.py +171 -29
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_drive_queue.py +156 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_db.py +118 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_state.py +423 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.gitignore +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/CLAUDE.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/GOAL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/LICENSE +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/MANIFEST.in +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/README.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/__init__.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agent.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/audit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/backup.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/block_log.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/board_service.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/brain.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/claim.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/cli.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/client.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/codegen.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/comments.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/config.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dao.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deps.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/drive.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/events.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/filelock.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/freshness.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gates.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/goal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/context.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/models.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/render.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/units.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/hooks.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/interactive.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/models.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/network.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notify.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/openapi.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/parentage.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/plans.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/progress.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/release_window.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/reports.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/review.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/self_health.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/smoke.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/split_work.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/sql.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/test_author.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/test_report.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/usage.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/install-agent.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/pyproject.toml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/setup.cfg +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/__init__.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/backends.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/conftest.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_client.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_events.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_init.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_models.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_network.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_session.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_split.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/write_parity.py +0 -0
|
@@ -124,6 +124,7 @@ from coord.overlap_predict import (
|
|
|
124
124
|
|
|
125
125
|
if TYPE_CHECKING: # pragma: no cover — typing only
|
|
126
126
|
from coord.config import Config
|
|
127
|
+
from coord.merge_queue import QueuedMerge
|
|
127
128
|
|
|
128
129
|
log = logging.getLogger(__name__)
|
|
129
130
|
|
|
@@ -4740,14 +4741,51 @@ def _run_merge_only_candidates(plan: TickPlan, config_path: Path | None) -> None
|
|
|
4740
4741
|
click.echo(f"merge-only: {reason}")
|
|
4741
4742
|
|
|
4742
4743
|
|
|
4744
|
+
# #3396: the `stage` this call site's escalations are recorded under —
|
|
4745
|
+
# mirrors `ROLL_PENDING_ALERT_STAGE`/`SELF_CORDON_ALERT_STAGE` above, but
|
|
4746
|
+
# keyed per-entry (the entry's own `(repo_name, issue_number)`) rather than a
|
|
4747
|
+
# single fleet-wide slot, since more than one branch can be `checks_stale` at
|
|
4748
|
+
# once. `_run_auto_revalidate_checks_stale`'s cleanup pass reads this same
|
|
4749
|
+
# constant back to find which open escalations are its own to dismiss.
|
|
4750
|
+
CHECKS_STALE_ALERT_STAGE = "checks_stale"
|
|
4751
|
+
|
|
4752
|
+
|
|
4753
|
+
def _record_checks_stale_escalation(entry: "QueuedMerge", *, reason: str) -> None:
|
|
4754
|
+
"""Write (or refresh) the durable, human-visible escalation for *entry*
|
|
4755
|
+
(#3396 item 2) — ``coord escalate list``/``coord escalate run`` and the
|
|
4756
|
+
TUI already surface this table for every other "needs a human" condition
|
|
4757
|
+
in this file; a `checks_stale` block that this tick cannot move forward
|
|
4758
|
+
on its own now reaches it too, instead of only ever reprinting the same
|
|
4759
|
+
diagnosis to the journal every ~3 minutes forever.
|
|
4760
|
+
|
|
4761
|
+
Best-effort: a write failure here must not take down the rest of the
|
|
4762
|
+
tick — the caller already echoed the reason to stdout, which is the
|
|
4763
|
+
floor this falls back to.
|
|
4764
|
+
"""
|
|
4765
|
+
try:
|
|
4766
|
+
from coord.state import record_drive_escalation # noqa: PLC0415
|
|
4767
|
+
|
|
4768
|
+
record_drive_escalation(
|
|
4769
|
+
entry.repo_name,
|
|
4770
|
+
entry.issue_number,
|
|
4771
|
+
stage=CHECKS_STALE_ALERT_STAGE,
|
|
4772
|
+
reason=reason,
|
|
4773
|
+
gate_readings=f"error={entry.error}" if entry.error else "gate: READY",
|
|
4774
|
+
proposed_command=(
|
|
4775
|
+
f"coord merge --only {entry.repo_name}#{entry.issue_number}"
|
|
4776
|
+
),
|
|
4777
|
+
assignment_id=entry.assignment_id,
|
|
4778
|
+
)
|
|
4779
|
+
except Exception as exc: # noqa: BLE001 — the stdout line is the floor
|
|
4780
|
+
click.echo(f" (could not record the checks_stale escalation: {exc})")
|
|
4781
|
+
|
|
4782
|
+
|
|
4743
4783
|
def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
4744
|
-
"""#2535:
|
|
4784
|
+
"""#2535: unattended remedy for merge-queue entries blocked SOLELY on
|
|
4745
4785
|
stale CI checks against an already-approved review — closing the gap
|
|
4746
4786
|
where nothing periodic ever looks at such an entry on an operator's
|
|
4747
|
-
behalf
|
|
4748
|
-
|
|
4749
|
-
blocked 2026-08-21 on nothing but 210 unrelated merges having landed
|
|
4750
|
-
since its CI last ran).
|
|
4787
|
+
behalf (the trigger: #2530's Gate-A PR #2534 sat blocked 2026-08-21 on
|
|
4788
|
+
nothing but 210 unrelated merges having landed since its CI last ran).
|
|
4751
4789
|
|
|
4752
4790
|
#3266: this used to auto-fire a ``gh run rerun`` (``CiStore.
|
|
4753
4791
|
rerun_for_pr``) for exactly this shape, up to ``MAX_CI_STALE_RERUNS`` —
|
|
@@ -4756,46 +4794,89 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
4756
4794
|
there too: a ``gh run rerun`` replays the SAME event payload against
|
|
4757
4795
|
the SAME base the stale checks already used, so it can never see a
|
|
4758
4796
|
base that has since moved — which is the ONLY thing a staleness
|
|
4759
|
-
reading means.
|
|
4760
|
-
full CI cycle (this repo's median: ~62 minutes) on a guaranteed no-op,
|
|
4761
|
-
twice, before the shared ``ci_stale_reruns`` budget parked the entry
|
|
4762
|
-
anyway (claude-coordinator#2972). Per this repo's "one question, one
|
|
4763
|
-
answer" rule, this tick and ``process()`` must agree on the same
|
|
4764
|
-
question ("should we auto-rerun CI for a checks_stale block?") — they
|
|
4765
|
-
now both answer "no, park and point at a rebase" identically, rather
|
|
4766
|
-
than this call site silently keeping the old answer #2197 already gave
|
|
4767
|
-
up on live. See ``MAX_CI_STALE_RERUNS``'s comment in
|
|
4797
|
+
reading means. See ``MAX_CI_STALE_RERUNS``'s comment in
|
|
4768
4798
|
``coord/merge_queue.py`` and ``ci_stale_reason``'s docstring for the
|
|
4769
|
-
full reasoning
|
|
4770
|
-
|
|
4771
|
-
check against the CURRENT base
|
|
4799
|
+
full reasoning. The actual remedy is a rebase onto the target branch
|
|
4800
|
+
followed by ``git push --force-with-lease`` — the only thing that
|
|
4801
|
+
produces a check against the CURRENT base.
|
|
4802
|
+
|
|
4803
|
+
#3396: from #2535 through #3266 this call site only ever *reported*
|
|
4804
|
+
that remedy — it never performed it, so a `checks_stale` entry whose
|
|
4805
|
+
owning `coord drive` session had already exhausted its merge attempts
|
|
4806
|
+
and exited had NOTHING left watching it: this tick re-diagnosed the
|
|
4807
|
+
same block every ~3 minutes, forever, and the stale-rebase worker
|
|
4808
|
+
that exists for exactly this shape (:func:`coord.conflict_fix.
|
|
4809
|
+
dispatch_conflict_fix` with ``stale_rebase=True``, #3349) was never
|
|
4810
|
+
dispatched. #3349 already wired that worker into
|
|
4811
|
+
``coord.notify``'s stalled-pipeline sweep (``merge_gate_checks_stale``),
|
|
4812
|
+
but that sweep only runs when ``coord notify`` is invoked and
|
|
4813
|
+
``pipeline.auto_dispatch_stalled`` is on — it is not this tick, which
|
|
4814
|
+
runs unconditionally every few minutes on the daemon host. Per this
|
|
4815
|
+
repo's "one question, one answer" rule this call site now reuses the
|
|
4816
|
+
IDENTICAL dispatcher rather than re-deriving the decision: a
|
|
4817
|
+
content-preserving rebase gets force-pushed and the merge queue picks
|
|
4818
|
+
it up on its own next attempt, with no operator action, exactly like
|
|
4819
|
+
the #1090 reference case in the issue. A rebase that turns out to
|
|
4820
|
+
conflict (or change content) still refuses and escalates — the
|
|
4821
|
+
worker's own narrow briefing (:func:`coord.conflict_fix.
|
|
4822
|
+
build_stale_rebase_briefing`) enforces that, not this call site.
|
|
4823
|
+
|
|
4824
|
+
Escalation (#3396 item 2): a candidate this function cannot move
|
|
4825
|
+
forward — a conflict-fix already tried and failed against this SAME
|
|
4826
|
+
error (:func:`coord.conflict_fix.has_prior_conflict_fix`), or dispatch
|
|
4827
|
+
itself declined (no capable/reachable machine, no ``repo_path``) — is
|
|
4828
|
+
recorded via :func:`coord.state.record_drive_escalation` under the
|
|
4829
|
+
entry's OWN ``(repo, issue)``, the same durable, human-visible table
|
|
4830
|
+
``coord escalate list``/``coord escalate run`` already serve for every
|
|
4831
|
+
other "needs a human" condition in this file (see
|
|
4832
|
+
``ROLL_PENDING_ALERT_REPO``/``SELF_CORDON_ALERT_REPO`` above for the
|
|
4833
|
+
established one-slot-per-condition pattern; this one is naturally
|
|
4834
|
+
keyed per-entry instead, since more than one branch can be
|
|
4835
|
+
``checks_stale`` at once). Before #3396 a block that "needs a human"
|
|
4836
|
+
only ever reached this function's own stdout/journal line, printed
|
|
4837
|
+
again unchanged every tick — never a place an operator or the TUI
|
|
4838
|
+
would actually see it (the issue's own complaint: `coord drive-queue
|
|
4839
|
+
status` reporting ``alert: (none)`` throughout). A candidate that
|
|
4840
|
+
clears on its own (the rebase lands, or the base stops moving) is no
|
|
4841
|
+
longer in the next tick's *candidates* list, so its escalation (if any)
|
|
4842
|
+
is dismissed below — the table only ever holds genuinely-live blocks.
|
|
4772
4843
|
|
|
4773
4844
|
Deliberately narrow — this is NOT ``merge.auto_drain`` reopened (that
|
|
4774
4845
|
flag stays ``False`` by design; see ``docs/DRIVE_QUEUE.md`` and the
|
|
4775
4846
|
2026-06-07 incident it guards against). This step never merges
|
|
4776
|
-
anything
|
|
4777
|
-
|
|
4778
|
-
|
|
4847
|
+
anything and never mutates the merge-queue row itself — it only ever
|
|
4848
|
+
dispatches the SAME bounded, self-refusing worker
|
|
4849
|
+
:func:`coord.conflict_fix.dispatch_conflict_fix` already provides
|
|
4850
|
+
for the identical shape reached from a live drive/stalled-pipeline
|
|
4851
|
+
sweep, gated by the SAME one-per-entry retry cap
|
|
4852
|
+
(:func:`coord.conflict_fix.has_prior_conflict_fix`) — so a second
|
|
4853
|
+
tick finding the same still-stale entry while a rebase attempt is
|
|
4854
|
+
already running/pending does nothing, and one that already failed
|
|
4855
|
+
escalates instead of retrying. It never touches an entry blocked on
|
|
4856
|
+
review, a real CI failure, or a conflict — only the exact shape
|
|
4857
|
+
:func:`coord.merge_queue.ci_revalidation_candidates` scopes
|
|
4779
4858
|
``--revalidate``'s (equally no-op) CI arm to (#1851/#1925): ``PENDING``,
|
|
4780
4859
|
review approved, smoke fresh, CI checks green but predating the current
|
|
4781
4860
|
base.
|
|
4782
4861
|
|
|
4783
4862
|
``MAX_CI_STALE_RERUNS``/``ci_stale_reruns`` are read nowhere in this
|
|
4784
|
-
function
|
|
4785
|
-
|
|
4786
|
-
|
|
4787
|
-
|
|
4788
|
-
|
|
4789
|
-
Cost-visible (#1632's posture)
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4863
|
+
function — nothing here increments or checks that budget, so a row
|
|
4864
|
+
already carrying a nonzero count from before #3266 is left exactly as
|
|
4865
|
+
``process()`` leaves it (converges to 0 on the next genuinely-fresh
|
|
4866
|
+
reading, never incremented further by this call site).
|
|
4867
|
+
|
|
4868
|
+
Cost-visible (#1632's posture): dispatching a worker is real, visible
|
|
4869
|
+
spend — a :func:`coord.audit.record_audit` (business tier) row marks
|
|
4870
|
+
it, distinct from the operational-tier rows for a declined/escalated
|
|
4871
|
+
candidate, so an operator watching the audit trail can tell "this tick
|
|
4872
|
+
spent a session" from "this tick only reported a block" at a glance.
|
|
4873
|
+
|
|
4874
|
+
Deliberately NOT behind a new config flag — the worker it dispatches
|
|
4875
|
+
already carries its own bounded, self-refusing briefing and one-shot
|
|
4876
|
+
retry cap; there is nothing further to gate that
|
|
4877
|
+
``pipeline.auto_dispatch_stalled`` (the flag guarding ``coord
|
|
4878
|
+
notify``'s unrelated, broader stalled-pipeline sweep) doesn't already
|
|
4879
|
+
cover for that other call site.
|
|
4799
4880
|
|
|
4800
4881
|
Best-effort like every other optional step in this tick (conflict
|
|
4801
4882
|
reconciliation in ``_auto_drain_tick``, the merge-only fast path above):
|
|
@@ -4803,6 +4884,24 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
4803
4884
|
on a thin client — this daemon-host tick is the only place it ever
|
|
4804
4885
|
runs, same guard :func:`_fetch_live_ci_gate`/
|
|
4805
4886
|
:func:`_run_merge_only_candidates` use.
|
|
4887
|
+
|
|
4888
|
+
Known race, widened by this change (#3396 review): this tick is a new,
|
|
4889
|
+
independent, ALWAYS-ON caller of ``dispatch_conflict_fix(...,
|
|
4890
|
+
stale_rebase=True)`` (``deploy/coord-drive-queue.service``/``.timer``),
|
|
4891
|
+
alongside ``coord notify``'s stalled-pipeline sweep (a separate systemd
|
|
4892
|
+
timer, see ``docs/AGENT_OPERATIONS.md``) and a live drive's own merge
|
|
4893
|
+
attempt — three independent callers for the identical shape now. The
|
|
4894
|
+
shared guard (``has_prior_conflict_fix``/``_has_active_conflict_fix``)
|
|
4895
|
+
is a plain board-snapshot read with no cross-process lock between them:
|
|
4896
|
+
if two of these fire within the same window for the same gate-READY
|
|
4897
|
+
``checks_stale`` entry, both can independently observe "no prior fix in
|
|
4898
|
+
flight" and dispatch a duplicate stale-rebase worker. Wasted spend, not
|
|
4899
|
+
data loss — the second worker's push is a no-op or is itself refused —
|
|
4900
|
+
but this is the first caller to fire unconditionally on a fixed timer
|
|
4901
|
+
rather than behind a live drive or an opt-in flag, which widens the
|
|
4902
|
+
window. A real fix needs a cross-process claim (e.g. a DB-level lock
|
|
4903
|
+
keyed on the entry) rather than a snapshot read; tracked as a follow-up,
|
|
4904
|
+
not fixed here.
|
|
4806
4905
|
"""
|
|
4807
4906
|
from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
|
|
4808
4907
|
|
|
@@ -4815,10 +4914,32 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
4815
4914
|
from coord.audit import record_audit # noqa: PLC0415
|
|
4816
4915
|
from coord.ci_store import build_ci_store # noqa: PLC0415
|
|
4817
4916
|
from coord.commands._common import _load_config # noqa: PLC0415
|
|
4818
|
-
from coord.
|
|
4917
|
+
from coord.conflict_fix import ( # noqa: PLC0415
|
|
4918
|
+
_has_active_conflict_fix,
|
|
4919
|
+
describe_conflict_fix_decline,
|
|
4920
|
+
dispatch_conflict_fix,
|
|
4921
|
+
has_prior_conflict_fix,
|
|
4922
|
+
)
|
|
4923
|
+
from coord.network import fetch_status # noqa: PLC0415
|
|
4924
|
+
from coord.state import ( # noqa: PLC0415
|
|
4925
|
+
dismiss_drive_escalation,
|
|
4926
|
+
list_drive_escalations,
|
|
4927
|
+
load_board as _load_board,
|
|
4928
|
+
)
|
|
4819
4929
|
|
|
4820
4930
|
cfg = _load_config(config_path)
|
|
4821
|
-
|
|
4931
|
+
# #3396: `load_board()` can legitimately return `None` (no board data
|
|
4932
|
+
# at all yet). `ci_revalidation_candidates` already tolerates that
|
|
4933
|
+
# (its gate reads never dereference a `None` board when the gate they
|
|
4934
|
+
# guard isn't required), but `has_prior_conflict_fix`/
|
|
4935
|
+
# `dispatch_conflict_fix` below unconditionally walk
|
|
4936
|
+
# `board.active`/`board.completed` — an empty board is the correct
|
|
4937
|
+
# "no prior assignments exist" reading for both, and keeps the two
|
|
4938
|
+
# calls sharing the exact same object rather than one seeing `None`
|
|
4939
|
+
# and the other a stand-in.
|
|
4940
|
+
from coord.models import Board # noqa: PLC0415
|
|
4941
|
+
|
|
4942
|
+
board = _load_board() or Board()
|
|
4822
4943
|
ci_store = build_ci_store(
|
|
4823
4944
|
cfg.ci_store.type, host=cfg.ci_store.host, token_env=cfg.ci_store.token_env,
|
|
4824
4945
|
)
|
|
@@ -4829,34 +4950,145 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
4829
4950
|
except Exception: # noqa: BLE001 — best-effort, see docstring
|
|
4830
4951
|
return
|
|
4831
4952
|
|
|
4953
|
+
# #3396 review: the cleanup pass below treats an escalation's absence
|
|
4954
|
+
# from *candidates* as "confirmed cleared" — that's only a safe reading
|
|
4955
|
+
# once we know `candidates` came from a REAL read, not from a
|
|
4956
|
+
# `ci_store` that was `None`/unavailable (which `ci_revalidation_
|
|
4957
|
+
# candidates` also answers with `[]`, indistinguishable by return value
|
|
4958
|
+
# alone from "genuinely nothing is stale"). The `ci_store.is_available`
|
|
4959
|
+
# check above, and the broader `except Exception: return` around this
|
|
4960
|
+
# whole block, both already `return` BEFORE this point on exactly that
|
|
4961
|
+
# ambiguous case — so reaching here at all already means the read was
|
|
4962
|
+
# real. Do not restructure this so cleanup can be reached without a
|
|
4963
|
+
# confirmed-available `ci_store` and a `ci_revalidation_candidates` call
|
|
4964
|
+
# that returned normally; that reintroduces the "unconfirmed success"
|
|
4965
|
+
# bug this comment describes (epic #2096: dismissing an escalation is
|
|
4966
|
+
# asserting "resolved" — only do it from an observation, not an
|
|
4967
|
+
# inability to look).
|
|
4968
|
+
#
|
|
4969
|
+
# #3396: drop any prior checks_stale escalation for an entry that is no
|
|
4970
|
+
# longer a candidate this tick — either it landed, or the base stopped
|
|
4971
|
+
# moving. Runs even when *candidates* is empty (that's the fully-healed
|
|
4972
|
+
# case). Best-effort: a read/write hiccup here must not stop the actual
|
|
4973
|
+
# dispatch loop below from running.
|
|
4974
|
+
try:
|
|
4975
|
+
live_keys = {(c.repo_name, c.issue_number) for c in candidates}
|
|
4976
|
+
for esc in list_drive_escalations():
|
|
4977
|
+
if esc.get("stage") != CHECKS_STALE_ALERT_STAGE:
|
|
4978
|
+
continue
|
|
4979
|
+
key = (esc.get("repo_name"), esc.get("issue_number"))
|
|
4980
|
+
if key not in live_keys:
|
|
4981
|
+
dismiss_drive_escalation(esc["repo_name"], esc["issue_number"])
|
|
4982
|
+
except Exception: # noqa: BLE001 — best-effort, see docstring
|
|
4983
|
+
pass
|
|
4984
|
+
|
|
4832
4985
|
if not candidates:
|
|
4833
4986
|
return
|
|
4834
4987
|
|
|
4835
4988
|
for entry in candidates:
|
|
4836
4989
|
label = f"{entry.repo_name} #{entry.issue_number} ({entry.branch})"
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4990
|
+
|
|
4991
|
+
if has_prior_conflict_fix(board, entry.assignment_id, current_error=entry.error):
|
|
4992
|
+
if _has_active_conflict_fix(board, entry.assignment_id):
|
|
4993
|
+
# A stale-rebase attempt is already running/pending for this
|
|
4994
|
+
# entry (dispatched by this same tick earlier, a live drive,
|
|
4995
|
+
# or the `coord notify` sweep) — nothing to do, and nothing
|
|
4996
|
+
# to escalate: it will resolve, or fail and escalate, on its
|
|
4997
|
+
# own.
|
|
4998
|
+
click.echo(
|
|
4999
|
+
f"auto-revalidate: {label} is checks_stale — a "
|
|
5000
|
+
"stale-rebase conflict-fix is already in flight for it"
|
|
5001
|
+
)
|
|
5002
|
+
continue
|
|
5003
|
+
# A prior stale-rebase (or ordinary conflict-fix) attempt for
|
|
5004
|
+
# this SAME error already failed — the retry cap is spent, and
|
|
5005
|
+
# re-diagnosing it every tick forever is exactly the #3396 bug.
|
|
5006
|
+
# Escalate once into the durable table instead of only echoing.
|
|
5007
|
+
reason = (
|
|
5008
|
+
f"{label} is checks_stale and a prior conflict-fix attempt "
|
|
5009
|
+
"already failed against this same block — a CI re-run "
|
|
5010
|
+
"cannot clear it (same base) and the automatic rebase "
|
|
5011
|
+
"already gave up; needs a human"
|
|
5012
|
+
)
|
|
5013
|
+
click.echo(f"auto-revalidate: {reason}")
|
|
5014
|
+
record_audit(
|
|
5015
|
+
tier="operational", category="merge",
|
|
5016
|
+
event_type="merge_checks_stale_human_required",
|
|
5017
|
+
actor="drive-queue-tick",
|
|
5018
|
+
summary=reason,
|
|
5019
|
+
repo=entry.repo_name, issue=entry.issue_number,
|
|
5020
|
+
assignment_id=entry.assignment_id,
|
|
5021
|
+
details={"pr_number": entry.pr_number, "error": entry.error},
|
|
5022
|
+
)
|
|
5023
|
+
_record_checks_stale_escalation(entry, reason=reason)
|
|
5024
|
+
continue
|
|
5025
|
+
|
|
5026
|
+
pick_out: list = []
|
|
5027
|
+
fix = dispatch_conflict_fix(
|
|
5028
|
+
entry, board, cfg, stale_rebase=True,
|
|
5029
|
+
status_fetcher=fetch_status, machine_pick_out=pick_out,
|
|
5030
|
+
)
|
|
5031
|
+
if fix is not None:
|
|
5032
|
+
click.echo(
|
|
5033
|
+
f"auto-revalidate: {label} is checks_stale — dispatched a "
|
|
5034
|
+
f"stale-rebase conflict-fix ({fix.assignment_id}) to "
|
|
5035
|
+
f"{fix.machine_name} (#3396: no live drive needed)"
|
|
5036
|
+
)
|
|
5037
|
+
record_audit(
|
|
5038
|
+
tier="business", category="merge",
|
|
5039
|
+
event_type="merge_checks_stale_auto_rebase_dispatched",
|
|
5040
|
+
actor="drive-queue-tick",
|
|
5041
|
+
summary=(
|
|
5042
|
+
f"stale-rebase conflict-fix dispatched: {label} → "
|
|
5043
|
+
f"{fix.machine_name}"
|
|
5044
|
+
),
|
|
5045
|
+
repo=entry.repo_name, issue=entry.issue_number,
|
|
5046
|
+
assignment_id=fix.assignment_id,
|
|
5047
|
+
details={
|
|
5048
|
+
"pr_number": entry.pr_number,
|
|
5049
|
+
"merge_entry_id": entry.assignment_id,
|
|
5050
|
+
},
|
|
5051
|
+
)
|
|
5052
|
+
# #3396 review: an earlier tick may have already written a
|
|
5053
|
+
# `checks_stale` escalation for this SAME entry (dispatch
|
|
5054
|
+
# declined that time — no machine, no repo_path) before a later
|
|
5055
|
+
# tick found dispatch available and actually fired the worker.
|
|
5056
|
+
# Without this, `coord escalate list`/the TUI keep showing
|
|
5057
|
+
# "needs a human" for an entry that in fact now has a
|
|
5058
|
+
# stale-rebase worker actively running against it, until it
|
|
5059
|
+
# eventually drops out of `candidates` entirely. Best-effort —
|
|
5060
|
+
# a dismissal failure here must not undo the dispatch above.
|
|
5061
|
+
try:
|
|
5062
|
+
dismiss_drive_escalation(entry.repo_name, entry.issue_number)
|
|
5063
|
+
except Exception: # noqa: BLE001 — best-effort, see docstring
|
|
5064
|
+
pass
|
|
5065
|
+
continue
|
|
5066
|
+
|
|
5067
|
+
# Dispatch declined before ever starting a rebase — no capable or
|
|
5068
|
+
# reachable machine, no `repo_path` configured, or a flapping agent
|
|
5069
|
+
# (#3353). Still `checks_stale`, still gate-ready, and still nobody
|
|
5070
|
+
# is going to clear it on its own — surface it the same durable way
|
|
5071
|
+
# a genuine retry-cap exhaustion does, rather than a print-only line
|
|
5072
|
+
# nothing but the journal ever sees.
|
|
5073
|
+
decline_reason = describe_conflict_fix_decline(pick_out)
|
|
5074
|
+
reason = (
|
|
5075
|
+
f"{label} is checks_stale with a content-preserving rebase "
|
|
5076
|
+
f"expected to clear it, but dispatch declined: {decline_reason}"
|
|
4846
5077
|
)
|
|
5078
|
+
click.echo(f"auto-revalidate: {reason}")
|
|
4847
5079
|
record_audit(
|
|
4848
5080
|
tier="operational", category="merge",
|
|
4849
5081
|
event_type="merge_checks_stale_parked",
|
|
4850
5082
|
actor="drive-queue-tick",
|
|
4851
5083
|
summary=(
|
|
4852
5084
|
f"checks_stale: {label} needs a rebase, not a CI re-run "
|
|
4853
|
-
"(#3266)
|
|
4854
|
-
"staleness"
|
|
5085
|
+
f"(#3266); auto-dispatch declined: {decline_reason} (#3396)"
|
|
4855
5086
|
),
|
|
4856
5087
|
repo=entry.repo_name, issue=entry.issue_number,
|
|
4857
5088
|
assignment_id=entry.assignment_id,
|
|
4858
|
-
details={"pr_number": entry.pr_number},
|
|
5089
|
+
details={"pr_number": entry.pr_number, "decline_reason": decline_reason},
|
|
4859
5090
|
)
|
|
5091
|
+
_record_checks_stale_escalation(entry, reason=reason)
|
|
4860
5092
|
|
|
4861
5093
|
|
|
4862
5094
|
def _run_resume_probe(entry: QueueEntry) -> ProbeResult:
|
|
@@ -666,6 +666,129 @@ def rollback_after_driver_error(conn: Any | None, exc: BaseException) -> None:
|
|
|
666
666
|
pass
|
|
667
667
|
|
|
668
668
|
|
|
669
|
+
def undo_pending_write(conn: Any | None, exc: BaseException, *, undo: Callable[[], Any]) -> None:
|
|
670
|
+
"""Run *undo* — a compensating statement touching only THIS write's own
|
|
671
|
+
row — after *exc*, the #3382 sibling of
|
|
672
|
+
:func:`rollback_after_driver_error` for a writer whose own
|
|
673
|
+
``conn.commit()`` call, not just the statement before it, can raise.
|
|
674
|
+
|
|
675
|
+
:func:`rollback_after_driver_error` deliberately no-ops for a plain
|
|
676
|
+
SQLite error (see its docstring): that is correct when the failure is a
|
|
677
|
+
STATEMENT that never got to write anything — SQLite's ``SQLITE_BUSY``,
|
|
678
|
+
hit while acquiring the lock a write needs, leaves nothing applied, so
|
|
679
|
+
simply re-running the whole write closure from scratch (what
|
|
680
|
+
:func:`retry_on_locked` does) is exactly as good as a rollback.
|
|
681
|
+
|
|
682
|
+
That reasoning does not hold when it is ``conn.commit()`` itself that
|
|
683
|
+
raises. WAL-checkpoint contention can make ``COMMIT`` hit
|
|
684
|
+
``SQLITE_BUSY`` *after* the statement(s) before it already applied
|
|
685
|
+
inside the still-open transaction — the write is neither committed nor
|
|
686
|
+
undone, so it sits there, genuinely pending, on ``coord.db``'s shared
|
|
687
|
+
process-wide connection, ready for a completely unrelated handler's next
|
|
688
|
+
unrelated ``commit()`` to durably persist it later. #3382: this is
|
|
689
|
+
exactly how a ``review_claims`` row survived two callers who each saw
|
|
690
|
+
their own ``/review-claim`` POST fail with a 503 — neither call's own
|
|
691
|
+
retry-free write had anything guarding its ``commit()``, so the pending
|
|
692
|
+
insert outlived both failed calls and was swept up by a later,
|
|
693
|
+
completely unrelated write on the same shared connection.
|
|
694
|
+
|
|
695
|
+
A bare retry of the closure does not fix this the way it fixes a failed
|
|
696
|
+
statement, either: an ``INSERT OR IGNORE`` re-run against its own
|
|
697
|
+
still-pending prior insert reads back as a conflict (``rowcount == 0``),
|
|
698
|
+
so the retry silently misreports "someone else already holds this
|
|
699
|
+
claim" about a claim only this process's own earlier, abandoned attempt
|
|
700
|
+
took.
|
|
701
|
+
|
|
702
|
+
**Why a compensating statement, and not a transaction-level undo of any
|
|
703
|
+
kind (#3382 review rounds 1 and 2).** Two earlier shapes of this
|
|
704
|
+
function were both rejected, for the same underlying reason:
|
|
705
|
+
|
|
706
|
+
* ``conn.rollback()`` (round 1). On ``coord.db``'s shared, process-wide
|
|
707
|
+
SQLite singleton (see this module's own docstring), that discards
|
|
708
|
+
*every* other thread's not-yet-committed statement too — this process
|
|
709
|
+
dispatches other ``_*_local`` writers through ``run_in_threadpool`` on
|
|
710
|
+
real OS worker threads (the daemon's periodic tick, the ``/board``
|
|
711
|
+
build, ``/assignment/*`` handlers), and Python's ``sqlite3`` joins ANY
|
|
712
|
+
thread's statement issued on this one connection between commits into
|
|
713
|
+
the SAME open transaction. An unrelated writer that already got
|
|
714
|
+
``sql.execute``/``sql.insert_ignore``'s success back (nothing in this
|
|
715
|
+
tree commits internally — see ``coord/sql.py``) then silently loses it
|
|
716
|
+
when its own later ``conn.commit()`` no-ops or raises ``cannot commit
|
|
717
|
+
- no transaction is active`` — this issue's own second logged symptom.
|
|
718
|
+
|
|
719
|
+
* ``SAVEPOINT`` + ``ROLLBACK TO SAVEPOINT`` (round 2), whether the
|
|
720
|
+
savepoint name is a shared literal or made unique per call. Unique
|
|
721
|
+
names fix only the narrower half of the problem (two concurrent calls
|
|
722
|
+
resolving each other's marker, since SQLite binds a name to the most
|
|
723
|
+
recently established savepoint of that name). They do **not** fix the
|
|
724
|
+
half that matters: ``ROLLBACK TO SAVEPOINT`` reverts the database to
|
|
725
|
+
its state *just after that savepoint was established*, so it undoes
|
|
726
|
+
every statement issued since — including another thread's, which this
|
|
727
|
+
writer has no business undoing — and destroys that thread's own
|
|
728
|
+
savepoints along the way. Verified against a real ``sqlite3``
|
|
729
|
+
connection (Python 3.12, SQLite 3.45): with two distinctly-named
|
|
730
|
+
savepoints opened back to back and one row inserted after each,
|
|
731
|
+
``ROLLBACK TO`` the OUTER (uniquely-named) savepoint removes BOTH
|
|
732
|
+
rows. A transaction-scoped undo simply cannot express "mine only" on a
|
|
733
|
+
connection several threads write through.
|
|
734
|
+
|
|
735
|
+
So the undo is row-scoped instead: *undo* issues one statement that
|
|
736
|
+
names this write's own row and nothing else (delete the row this call
|
|
737
|
+
inserted, identified by its own ``claimed_at`` stamp; re-insert the row
|
|
738
|
+
this call deleted, with the ``claimed_at`` it read back first). It is
|
|
739
|
+
exact regardless of how other threads' statements interleave with this
|
|
740
|
+
one — before the failure or after it — because it never refers to their
|
|
741
|
+
rows.
|
|
742
|
+
|
|
743
|
+
It also degrades better than a transaction-level undo when an unrelated
|
|
744
|
+
thread's ``commit()`` lands *between* this write's statement and this
|
|
745
|
+
recovery: a savepoint would already have been destroyed by that commit
|
|
746
|
+
(``COMMIT`` releases all savepoints), leaving ``ROLLBACK TO`` to fail
|
|
747
|
+
and this write's row durably committed and leaked — precisely the
|
|
748
|
+
incident. The compensating statement instead stays pending and is
|
|
749
|
+
flushed by whichever ``commit()`` reaches it next (this closure's own
|
|
750
|
+
retry, or another writer's), so the net effect on this row is still
|
|
751
|
+
nothing.
|
|
752
|
+
|
|
753
|
+
Call this from the ``except sql.driver_errors():`` block of a write
|
|
754
|
+
closure that both executes a statement *and* calls ``conn.commit()``
|
|
755
|
+
itself, and **only when that closure's own statement actually applied**
|
|
756
|
+
(``cursor.rowcount``) — a statement that failed applied nothing, so
|
|
757
|
+
there is nothing to compensate, the same "a failed STATEMENT applies
|
|
758
|
+
nothing" reasoning :func:`rollback_after_driver_error` already
|
|
759
|
+
documents. Today's callers are the ``review_claims``/``smoke_claims``
|
|
760
|
+
claim and release writes in ``coord/state.py`` (#3113/#3333), the two
|
|
761
|
+
sites where "did this claim land" is an exclusive-ownership decision the
|
|
762
|
+
rest of the system relies on, unlike most of this module's writers where
|
|
763
|
+
a duplicate-on-retry UPDATE/DELETE is harmless.
|
|
764
|
+
|
|
765
|
+
Unlike :func:`rollback_after_driver_error`, this does not inspect *exc*
|
|
766
|
+
for a SQLSTATE: the plain-SQLite case above is exactly what it exists to
|
|
767
|
+
cover. On Postgres it is a harmless no-op in practice — a failed
|
|
768
|
+
``COMMIT`` there aborts the whole transaction (so *undo* raises
|
|
769
|
+
``InFailedSqlTransaction``, suppressed below) and
|
|
770
|
+
:func:`retry_on_locked`'s own :func:`rollback_after_driver_error` call
|
|
771
|
+
has already undone this write for real; ``get_connection()`` also hands
|
|
772
|
+
each THREAD its own connection there (see this module's docstring), so
|
|
773
|
+
no other thread's statement was ever at risk.
|
|
774
|
+
|
|
775
|
+
Same suppression rule as :func:`rollback_after_driver_error`: a ``None``
|
|
776
|
+
*conn* is a no-op, and a failure of *undo* itself is swallowed so it
|
|
777
|
+
never masks *exc*, the exception actually worth seeing. If the
|
|
778
|
+
compensating statement cannot run either (sustained contention
|
|
779
|
+
outlasting even this), this write's own row is left pending for the next
|
|
780
|
+
writer's eventual commit/rollback to resolve — the same residual,
|
|
781
|
+
already-accepted risk :func:`rollback_after_driver_error`'s own
|
|
782
|
+
suppressed-failure path carries today, not a new one.
|
|
783
|
+
"""
|
|
784
|
+
if conn is None:
|
|
785
|
+
return
|
|
786
|
+
try:
|
|
787
|
+
undo()
|
|
788
|
+
except Exception: # noqa: BLE001 — never mask the caught driver error
|
|
789
|
+
pass
|
|
790
|
+
|
|
791
|
+
|
|
669
792
|
# #2538: a handful of consecutive short retries — long enough to ride out a
|
|
670
793
|
# concurrent writer (the daemon's own passive tick, another `coord merge`/
|
|
671
794
|
# `coord notify` invocation) that only holds the DB for a moment, short
|
|
@@ -3724,16 +3724,24 @@ def ci_revalidation_candidates(
|
|
|
3724
3724
|
`rerun_for_pr` replays the same run against the same base it already
|
|
3725
3725
|
used, so it can never see the new one. `process()`'s OWN #2197
|
|
3726
3726
|
auto-rerun for this trigger was dropped for that reason (see
|
|
3727
|
-
`MAX_CI_STALE_RERUNS`'s comment)
|
|
3728
|
-
|
|
3729
|
-
was fixed the same way in the same change — it still calls this
|
|
3730
|
-
function to find the candidates, but only to report them, never to
|
|
3731
|
-
rerun anything. The one remaining caller that still calls
|
|
3732
|
-
`rerun_for_pr` on what this returns is `coord.commands.merge
|
|
3727
|
+
`MAX_CI_STALE_RERUNS`'s comment). The one remaining caller that still
|
|
3728
|
+
calls `rerun_for_pr` on what this returns is `coord.commands.merge
|
|
3733
3729
|
._apply_ci_revalidation` (the opt-in ``--revalidate`` CI arm) — equally
|
|
3734
3730
|
unable to clear the block, but lower severity since a human has to
|
|
3735
3731
|
explicitly ask for it. Left as-is here: fixing it is a change to that
|
|
3736
3732
|
module, out of this function's/file's scope, and a tracked follow-up.
|
|
3733
|
+
|
|
3734
|
+
#3396: `coord.commands.drive_queue._run_auto_revalidate_checks_stale`
|
|
3735
|
+
(the unattended periodic call site) still calls this function to find
|
|
3736
|
+
the candidates, but no longer only to report them — a #3266-through-
|
|
3737
|
+
#3396 gap meant a `checks_stale` entry whose owning `coord drive`
|
|
3738
|
+
session had already exited was never seen by anything that could
|
|
3739
|
+
actually clear it, only re-diagnosed forever. That call site now
|
|
3740
|
+
dispatches the SAME bounded, self-refusing stale-rebase worker
|
|
3741
|
+
(:func:`coord.conflict_fix.dispatch_conflict_fix` with
|
|
3742
|
+
``stale_rebase=True``) a live drive or `coord notify`'s stalled-pipeline
|
|
3743
|
+
sweep would already use for this exact shape — never a `gh run rerun`,
|
|
3744
|
+
which stays the known no-op described above.
|
|
3737
3745
|
"""
|
|
3738
3746
|
if ci_store is None or not ci_store.is_available:
|
|
3739
3747
|
return []
|