code-coordinator 0.5.518__tar.gz → 0.5.520__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.518 → code_coordinator-0.5.520}/PKG-INFO +1 -1
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/conflict_fix.py +44 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gates.py +214 -5
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notify.py +15 -3
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/reconcile.py +118 -22
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_conflict_fix.py +147 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gates.py +208 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notify.py +78 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile.py +103 -4
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.gitignore +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/CLAUDE.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/GOAL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/LICENSE +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/MANIFEST.in +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/README.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/__init__.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agent.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/audit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/backup.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/block_log.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/board_service.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/brain.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/claim.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/cli.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/client.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/codegen.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/comments.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/config.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dao.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/db.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deps.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/drive.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/events.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/filelock.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/freshness.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/goal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/context.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/models.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/render.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/units.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/hooks.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/interactive.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/models.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/network.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/openapi.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/parentage.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/plans.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/progress.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/release_window.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/reports.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/review.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/self_health.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/smoke.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/split_work.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/sql.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/state.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/test_author.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/test_report.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/usage.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/install-agent.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/pyproject.toml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/setup.cfg +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/__init__.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/backends.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/conftest.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_client.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_db.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_events.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_init.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_models.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_network.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_session.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_split.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_state.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/write_parity.py +0 -0
|
@@ -928,6 +928,7 @@ def has_prior_conflict_fix(
|
|
|
928
928
|
merge_entry_id: str | None,
|
|
929
929
|
*,
|
|
930
930
|
current_error: str | None = None,
|
|
931
|
+
ignore_stale_rebase_attempts: bool = False,
|
|
931
932
|
) -> bool:
|
|
932
933
|
"""True when a second conflict-fix dispatch for *merge_entry_id* is blocked.
|
|
933
934
|
|
|
@@ -952,6 +953,21 @@ def has_prior_conflict_fix(
|
|
|
952
953
|
recurring unchanged — not a fresh conflict — so it now consumes the cap
|
|
953
954
|
too. Callers that don't pass *current_error* keep the pre-#2475 behaviour
|
|
954
955
|
(``done`` never blocks) since they have no error text to compare.
|
|
956
|
+
|
|
957
|
+
*ignore_stale_rebase_attempts* (#3444): a stale-rebase dispatch
|
|
958
|
+
(``dispatch_conflict_fix(..., stale_rebase=True)``, title prefixed
|
|
959
|
+
:data:`STALE_REBASE_FIX_TITLE_PREFIX`) never even attempts a mechanical
|
|
960
|
+
resolution — it is authorized ONLY for a pure, content-preserving
|
|
961
|
+
rebase, and its own briefing embeds the SAME ``entry.error`` as its
|
|
962
|
+
"Reason:" line. Without this flag, its refusal (agent-reported ``done``,
|
|
963
|
+
downgraded to a give-up by the ``stale-rebase-mismatch`` marker — see
|
|
964
|
+
:func:`detect_stale_rebase_mismatch`) would trip the #2475
|
|
965
|
+
identical-error check above and block the ordinary conflict-fix #3444
|
|
966
|
+
escalates to right after, even though the ordinary path hasn't been
|
|
967
|
+
tried yet. Set by the one caller doing that escalation
|
|
968
|
+
(:func:`coord.reconcile._try_ordinary_escalation_after_stale_mismatch`)
|
|
969
|
+
to skip every stale-rebase-titled row entirely — active or not — so
|
|
970
|
+
ONLY prior *ordinary* conflict-fix attempts count against the cap.
|
|
955
971
|
"""
|
|
956
972
|
if merge_entry_id is None:
|
|
957
973
|
return False
|
|
@@ -960,6 +976,10 @@ def has_prior_conflict_fix(
|
|
|
960
976
|
continue
|
|
961
977
|
if a.review_of_assignment_id != merge_entry_id:
|
|
962
978
|
continue
|
|
979
|
+
if ignore_stale_rebase_attempts and (a.issue_title or "").startswith(
|
|
980
|
+
STALE_REBASE_FIX_TITLE_PREFIX,
|
|
981
|
+
):
|
|
982
|
+
continue
|
|
963
983
|
# Active attempt in flight — prevent duplicate dispatch.
|
|
964
984
|
if a.status in ("running", "pending"):
|
|
965
985
|
return True
|
|
@@ -1254,6 +1274,7 @@ def dispatch_conflict_fix(
|
|
|
1254
1274
|
model: str | None = None,
|
|
1255
1275
|
stuck_summary: str | None = None,
|
|
1256
1276
|
stale_rebase: bool = False,
|
|
1277
|
+
after_stale_rebase_mismatch: bool = False,
|
|
1257
1278
|
status_fetcher: Callable[..., StatusResult] | None = None,
|
|
1258
1279
|
machine_pick_out: "list[ConflictFixMachinePick] | None" = None,
|
|
1259
1280
|
) -> Assignment | None:
|
|
@@ -1357,6 +1378,23 @@ def dispatch_conflict_fix(
|
|
|
1357
1378
|
(non-``semantic``) path below — a staleness-only block that recurs
|
|
1358
1379
|
against the same error after a prior conflict-fix attempt escalates to
|
|
1359
1380
|
a human exactly like a recurring mechanical conflict would.
|
|
1381
|
+
|
|
1382
|
+
``after_stale_rebase_mismatch=True`` (#3444) dispatches the ORDINARY
|
|
1383
|
+
conflict-fix path (same briefing/system-prompt/title as the plain
|
|
1384
|
+
``else`` branch below — this is not a distinct dispatch kind, just a
|
|
1385
|
+
retry-cap carve-out) right after a stale-rebase worker's
|
|
1386
|
+
``stale-rebase-mismatch`` refusal: that verdict means the *just-stale*
|
|
1387
|
+
premise was wrong — the rebase hit a genuine content conflict, so this
|
|
1388
|
+
is an ordinary conflict that deserves the ordinary mechanical attempt,
|
|
1389
|
+
not an immediate HUMAN_REQUIRED. Passes
|
|
1390
|
+
``ignore_stale_rebase_attempts=True`` to :func:`has_prior_conflict_fix`
|
|
1391
|
+
so the just-failed stale-rebase attempt — which never even tried a
|
|
1392
|
+
mechanical resolution — doesn't itself consume this cap; only a prior
|
|
1393
|
+
*ordinary* conflict-fix attempt does, capping this escalation at one
|
|
1394
|
+
per entry same as everything else here. #3349's safety property is
|
|
1395
|
+
unaffected: the stale-rebase worker itself still never resolves
|
|
1396
|
+
anything — only this ordinary worker (or its own semantic-escalation
|
|
1397
|
+
tier) may.
|
|
1360
1398
|
"""
|
|
1361
1399
|
if semantic:
|
|
1362
1400
|
if has_prior_semantic_escalation(board, entry.assignment_id):
|
|
@@ -1365,6 +1403,7 @@ def dispatch_conflict_fix(
|
|
|
1365
1403
|
return None
|
|
1366
1404
|
elif has_prior_conflict_fix(
|
|
1367
1405
|
board, entry.assignment_id, current_error=entry.error,
|
|
1406
|
+
ignore_stale_rebase_attempts=after_stale_rebase_mismatch,
|
|
1368
1407
|
):
|
|
1369
1408
|
return None
|
|
1370
1409
|
|
|
@@ -1576,6 +1615,11 @@ def dispatch_conflict_fix(
|
|
|
1576
1615
|
# rebase dispatch from an ordinary conflict-fix without
|
|
1577
1616
|
# re-deriving it from the assignment title prefix.
|
|
1578
1617
|
"stale_rebase": stale_rebase,
|
|
1618
|
+
# #3444: distinguishes an ordinary conflict-fix dispatched
|
|
1619
|
+
# normally from one escalated right after a stale-rebase
|
|
1620
|
+
# worker's mismatch refusal — same title/briefing either way,
|
|
1621
|
+
# so this is the only durable trace of which path led here.
|
|
1622
|
+
"after_stale_rebase_mismatch": after_stale_rebase_mismatch,
|
|
1579
1623
|
},
|
|
1580
1624
|
)
|
|
1581
1625
|
|
|
@@ -42,6 +42,7 @@ duck-typed shape they expect.
|
|
|
42
42
|
from __future__ import annotations
|
|
43
43
|
|
|
44
44
|
from dataclasses import asdict, dataclass, field
|
|
45
|
+
from datetime import datetime, timezone
|
|
45
46
|
from typing import TYPE_CHECKING
|
|
46
47
|
|
|
47
48
|
from coord.confirm_test import (
|
|
@@ -60,6 +61,21 @@ if TYPE_CHECKING: # avoid import cycles / heavy imports at module load
|
|
|
60
61
|
# "smoke_required" finds both a live merge attempt AND a `coord gates` read.
|
|
61
62
|
REVIEW_REQUIRED = "review_required"
|
|
62
63
|
SMOKE_REQUIRED = "smoke_required"
|
|
64
|
+
# #3445: distinct from the two tokens above — a latched HUMAN_REQUIRED
|
|
65
|
+
# merge-queue entry (an automated conflict-fix that already gave up, #1291)
|
|
66
|
+
# is not "review/smoke unmet", it is "the merge itself already failed and
|
|
67
|
+
# needs a human (or `--override-human-required`)". Clearing review or smoke
|
|
68
|
+
# cannot unstick it, so it outranks both as the merge gate's headline reason
|
|
69
|
+
# — see `_merge_queue_state_decision` and its call site in
|
|
70
|
+
# `build_gate_report`.
|
|
71
|
+
HUMAN_REQUIRED_BLOCKED = "human_required"
|
|
72
|
+
# #3445 review: SKIPPED is `_merge_queue_state_decision`'s own comment's
|
|
73
|
+
# other "parked, needs-attention" state alongside HUMAN_REQUIRED (and
|
|
74
|
+
# `coord/drive.py`'s `_RETRYABLE_MERGE_STATUSES` docstring independently
|
|
75
|
+
# documents it as equally terminal, unlike CONFLICT, which self-heals via
|
|
76
|
+
# `dispatch_conflict_fix` and is deliberately NOT in this override) — so it
|
|
77
|
+
# gets the same headline-outranking treatment, not just HUMAN_REQUIRED.
|
|
78
|
+
SKIPPED_BLOCKED = "skipped"
|
|
63
79
|
|
|
64
80
|
|
|
65
81
|
@dataclass
|
|
@@ -451,6 +467,124 @@ def _exempt_dependency_notes_for_winner(
|
|
|
451
467
|
return []
|
|
452
468
|
|
|
453
469
|
|
|
470
|
+
def _iso(ts: float | None) -> str | None:
|
|
471
|
+
if not ts:
|
|
472
|
+
return None
|
|
473
|
+
return datetime.fromtimestamp(float(ts), tz=timezone.utc).strftime("%Y-%m-%d %H:%M:%SZ")
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
def _merge_queue_state_decision(
|
|
477
|
+
repo_name: str, issue_number: int, fallback_assignment_id: str | None,
|
|
478
|
+
) -> GateDecision | None:
|
|
479
|
+
"""The REAL, persisted ``merge_queue`` row's state for
|
|
480
|
+
``(repo_name, issue_number)``, or ``None`` when no such row exists
|
|
481
|
+
(#3445).
|
|
482
|
+
|
|
483
|
+
This is deliberately a *second* read, distinct from the synthetic
|
|
484
|
+
``QueuedMerge`` :func:`build_gate_report` builds via
|
|
485
|
+
``mq.live_gate_entry`` to feed the review/test/registry gate checks:
|
|
486
|
+
that object is constructed fresh on every call and never persisted, so
|
|
487
|
+
it always carries the dataclass default ``state=PENDING`` — it was
|
|
488
|
+
never going to surface a *latched* CONFLICT/HUMAN_REQUIRED/SKIPPED.
|
|
489
|
+
Before this, ``coord gates`` had no read of the real merge-queue table
|
|
490
|
+
at all, so an issue whose entry had already given up (an automated
|
|
491
|
+
conflict-fix exhausting its one retry, #1291, or a stale-rebase worker
|
|
492
|
+
refusing to push a non-content-preserving rebase) reported
|
|
493
|
+
``merge : BLOCKED — smoke_required`` — true in isolation, but not the
|
|
494
|
+
reason nothing is moving: clearing the smoke gate cannot unstick a
|
|
495
|
+
HUMAN_REQUIRED entry, only a human (or ``coord merge --only <aid>
|
|
496
|
+
--override-human-required``) can.
|
|
497
|
+
|
|
498
|
+
Matched on ``(repo_name, issue_number)`` — the same two facts
|
|
499
|
+
:func:`coord.drive_state._merge_entry` matches the raw ``merge_queue``
|
|
500
|
+
row against for exactly the same reason (a fix-chain may have re-keyed
|
|
501
|
+
the entry's ``assignment_id`` to a newer work row) — with
|
|
502
|
+
*fallback_assignment_id* (the winning work row `build_gate_report`
|
|
503
|
+
already selected) preferred when more than one row matches.
|
|
504
|
+
|
|
505
|
+
Fail-open like every other best-effort DB read in this module
|
|
506
|
+
(``_backfill_is_interactive``, ``_apply_gate_decision``): an
|
|
507
|
+
unreachable DB degrades to "no merge-queue line" rather than failing
|
|
508
|
+
the whole ``coord gates`` read.
|
|
509
|
+
"""
|
|
510
|
+
try:
|
|
511
|
+
from coord import merge_queue as mq # noqa: PLC0415
|
|
512
|
+
|
|
513
|
+
entries = mq.load_queue()
|
|
514
|
+
except Exception: # noqa: BLE001 — advisory only, see docstring
|
|
515
|
+
return None
|
|
516
|
+
|
|
517
|
+
matches = [
|
|
518
|
+
e for e in entries
|
|
519
|
+
if e.repo_name == repo_name and e.issue_number == issue_number
|
|
520
|
+
]
|
|
521
|
+
if not matches:
|
|
522
|
+
return None
|
|
523
|
+
if fallback_assignment_id:
|
|
524
|
+
by_aid = [e for e in matches if e.assignment_id == fallback_assignment_id]
|
|
525
|
+
if by_aid:
|
|
526
|
+
matches = by_aid
|
|
527
|
+
# First match in list order — not the most recent — mirroring
|
|
528
|
+
# `coord.drive_state._merge_entry` (the docstring's own cited
|
|
529
|
+
# precedent for matching on this same `(repo_name, issue_number)` pair):
|
|
530
|
+
# when more than one row matches and none matches *fallback_assignment_id*
|
|
531
|
+
# (e.g. a retarget/new branch for the same issue left an old row behind),
|
|
532
|
+
# `coord gates` must agree with the other `merge_queue` consumers
|
|
533
|
+
# (`coord drive-queue block-log`, `coord status`, `_decide_merge`) on
|
|
534
|
+
# which row is "the" entry, or the same issue reads differently on
|
|
535
|
+
# different surfaces (#3445 review).
|
|
536
|
+
entry = matches[0]
|
|
537
|
+
|
|
538
|
+
state = (entry.state or "").upper()
|
|
539
|
+
# PENDING/MERGING/MERGED (and any future non-terminal state) read as
|
|
540
|
+
# "nothing to escalate here" — the raw state name is still shown, but
|
|
541
|
+
# unadorned. CONFLICT/HUMAN_REQUIRED/SKIPPED are the parked, needs-
|
|
542
|
+
# attention states. Delegated to `mq._state_to_plan_status` — the
|
|
543
|
+
# CANONICAL classifier for this exact question (`PENDING`->READY,
|
|
544
|
+
# `MERGING`->MERGING, `MERGED`->MERGED, anything else, including any
|
|
545
|
+
# future/unknown state -> NEEDS_ATTENTION) — rather than a second,
|
|
546
|
+
# hand-maintained tuple of "which states need attention" that could
|
|
547
|
+
# silently drift from it (#2096, #3445 review). That classifier fails
|
|
548
|
+
# CLOSED on an unrecognized state; re-deriving the tri-state locally
|
|
549
|
+
# would fail open instead, exactly the "gate must be able to fail"
|
|
550
|
+
# pattern this repo's review checklist calls out.
|
|
551
|
+
ok = mq._state_to_plan_status(entry.state or "") != mq.PLAN_NEEDS_ATTENTION
|
|
552
|
+
|
|
553
|
+
reason: str | None = None
|
|
554
|
+
if state == "HUMAN_REQUIRED":
|
|
555
|
+
aid = entry.assignment_id or fallback_assignment_id or "<assignment-id>"
|
|
556
|
+
detail_lines = [entry.error or "no reason recorded"]
|
|
557
|
+
latched = _iso(entry.last_attempt)
|
|
558
|
+
if latched:
|
|
559
|
+
detail_lines.append(
|
|
560
|
+
f"as of last merge-queue write {latched} — this timestamp "
|
|
561
|
+
"does not advance while the entry is parked, so treat it as "
|
|
562
|
+
"a LOWER BOUND on when it latched, not necessarily still "
|
|
563
|
+
"current (#3445)"
|
|
564
|
+
)
|
|
565
|
+
else:
|
|
566
|
+
detail_lines.append(
|
|
567
|
+
"latched time unknown — no merge-queue attempt timestamp "
|
|
568
|
+
"recorded on this entry"
|
|
569
|
+
)
|
|
570
|
+
detail_lines.append(
|
|
571
|
+
f"override: coord merge --only {aid} --override-human-required "
|
|
572
|
+
"'<reason>'"
|
|
573
|
+
)
|
|
574
|
+
reason = "\n".join(detail_lines)
|
|
575
|
+
elif not ok:
|
|
576
|
+
reason = entry.error or None
|
|
577
|
+
|
|
578
|
+
return GateDecision(
|
|
579
|
+
gate="merge_queue",
|
|
580
|
+
required=False,
|
|
581
|
+
ok=ok,
|
|
582
|
+
reason=reason,
|
|
583
|
+
state=state or None,
|
|
584
|
+
assignment_id=entry.assignment_id or None,
|
|
585
|
+
)
|
|
586
|
+
|
|
587
|
+
|
|
454
588
|
def _apply_gate_decision(repo_name: str, issue_number: int) -> GateDecision | None:
|
|
455
589
|
"""The ``"apply"`` :class:`GateDecision` for *(repo_name, issue_number)*,
|
|
456
590
|
or ``None`` when there is no ``--hold-after`` deploy-gate entry for it in
|
|
@@ -741,8 +875,42 @@ def build_gate_report(
|
|
|
741
875
|
registry_decisions[gate_name] = decision
|
|
742
876
|
report.decisions.append(decision)
|
|
743
877
|
|
|
878
|
+
# #3445: the REAL, persisted merge-queue row — distinct from the
|
|
879
|
+
# synthetic `entry` above, which always reads state=PENDING (see
|
|
880
|
+
# `_merge_queue_state_decision`'s docstring). Read AFTER the registry
|
|
881
|
+
# gates so it can be reported alongside them, but consulted FIRST below
|
|
882
|
+
# when deciding the merge gate's headline reason: a latched
|
|
883
|
+
# HUMAN_REQUIRED (or SKIPPED, #3445 review) entry is the actual reason
|
|
884
|
+
# nothing is moving, and no amount of review/smoke/registry-gate
|
|
885
|
+
# clearing can unstick it. CONFLICT is deliberately NOT in this set — it
|
|
886
|
+
# self-heals via `dispatch_conflict_fix` (#1474), so it does not outrank
|
|
887
|
+
# the normal review/smoke headline.
|
|
888
|
+
mq_state_decision = _merge_queue_state_decision(
|
|
889
|
+
repo_name, issue_number, winner.assignment_id,
|
|
890
|
+
)
|
|
891
|
+
if mq_state_decision is not None:
|
|
892
|
+
report.decisions.append(mq_state_decision)
|
|
893
|
+
|
|
744
894
|
merge_blocked_gate: str | None = None
|
|
745
|
-
if
|
|
895
|
+
if mq_state_decision is not None and mq_state_decision.state in (
|
|
896
|
+
"HUMAN_REQUIRED", "SKIPPED",
|
|
897
|
+
):
|
|
898
|
+
# #3445 review: the full detail (reason, latched-time caveat,
|
|
899
|
+
# override command) is already rendered on the "merge-queue" line
|
|
900
|
+
# `format_gate_report` prints alongside this one — keep the
|
|
901
|
+
# presentation cross-reference ("see the merge-queue line above...")
|
|
902
|
+
# OUT of this data field, since `merge.reason` is also consumed
|
|
903
|
+
# verbatim by non-CLI-rendering readers with no such line above it
|
|
904
|
+
# (`coord.queue_diagnose`'s `_gates()` probe). This field stays a
|
|
905
|
+
# short, state-only headline; `format_gate_report` adds the
|
|
906
|
+
# cross-reference itself, only where the referent actually exists.
|
|
907
|
+
token = (
|
|
908
|
+
HUMAN_REQUIRED_BLOCKED
|
|
909
|
+
if mq_state_decision.state == "HUMAN_REQUIRED"
|
|
910
|
+
else SKIPPED_BLOCKED
|
|
911
|
+
)
|
|
912
|
+
merge_blocked_gate = f"{token} — {mq_state_decision.state}"
|
|
913
|
+
elif review_required and not review_ok:
|
|
746
914
|
merge_blocked_gate = REVIEW_REQUIRED
|
|
747
915
|
elif smoke_required and not test_ok:
|
|
748
916
|
merge_blocked_gate = SMOKE_REQUIRED
|
|
@@ -912,6 +1080,29 @@ def format_gate_report(report: GateReport) -> str:
|
|
|
912
1080
|
lines.append(f" {test.reason}")
|
|
913
1081
|
else:
|
|
914
1082
|
lines.append(f" test : BLOCKED — {test.reason}")
|
|
1083
|
+
# #3445: the REAL, persisted merge-queue row's state — distinct from
|
|
1084
|
+
# the review/test/merge decisions above, which are all evaluated
|
|
1085
|
+
# against a synthetic, never-persisted entry (see
|
|
1086
|
+
# `_merge_queue_state_decision`'s docstring). Only printed when a
|
|
1087
|
+
# row actually exists for this (repo, issue) — the common case for
|
|
1088
|
+
# an issue that never reached the merge queue at all is silence,
|
|
1089
|
+
# same convention as the "apply" line below. A HUMAN_REQUIRED row
|
|
1090
|
+
# gets its full multi-line detail (reason, latched-time caveat,
|
|
1091
|
+
# override command); every other state is a single unadorned line.
|
|
1092
|
+
merge_queue_decision = by_gate.get("merge_queue")
|
|
1093
|
+
if merge_queue_decision is not None:
|
|
1094
|
+
state_label = merge_queue_decision.state or "UNKNOWN"
|
|
1095
|
+
detail_lines = (
|
|
1096
|
+
merge_queue_decision.reason.split("\n")
|
|
1097
|
+
if merge_queue_decision.reason
|
|
1098
|
+
else []
|
|
1099
|
+
)
|
|
1100
|
+
if not detail_lines:
|
|
1101
|
+
lines.append(f" merge-queue : {state_label}")
|
|
1102
|
+
else:
|
|
1103
|
+
lines.append(f" merge-queue : {state_label} — {detail_lines[0]}")
|
|
1104
|
+
for extra in detail_lines[1:]:
|
|
1105
|
+
lines.append(f" {extra}")
|
|
915
1106
|
# #3273 (S-5 of #3261): any other registry-backed gate (today just
|
|
916
1107
|
# "uat") renders generically here, in `report.decisions`' own
|
|
917
1108
|
# insertion order — a gate GATE_REGISTRY grows in the future needs no
|
|
@@ -919,7 +1110,7 @@ def format_gate_report(report: GateReport) -> str:
|
|
|
919
1110
|
# skipped/inapplicable one (UAT not configured, or an exempt issue)
|
|
920
1111
|
# gets an explicit reason instead of being silently omitted like it
|
|
921
1112
|
# was before #3273.
|
|
922
|
-
_KNOWN_GATE_LINES = ("review", "test", "merge", "apply")
|
|
1113
|
+
_KNOWN_GATE_LINES = ("review", "test", "merge_queue", "merge", "apply")
|
|
923
1114
|
for decision in report.decisions:
|
|
924
1115
|
if decision.gate in _KNOWN_GATE_LINES:
|
|
925
1116
|
continue
|
|
@@ -938,9 +1129,27 @@ def format_gate_report(report: GateReport) -> str:
|
|
|
938
1129
|
lines.append(f" {label} : BLOCKED — {decision.reason}")
|
|
939
1130
|
merge = by_gate.get("merge")
|
|
940
1131
|
if merge is not None:
|
|
941
|
-
|
|
942
|
-
" merge : READY"
|
|
943
|
-
|
|
1132
|
+
if merge.ok:
|
|
1133
|
+
lines.append(" merge : READY")
|
|
1134
|
+
else:
|
|
1135
|
+
lines.append(f" merge : BLOCKED — {merge.reason}")
|
|
1136
|
+
# #3445 review: the cross-reference belongs only in THIS
|
|
1137
|
+
# rendering, right after the "merge-queue" line it actually
|
|
1138
|
+
# points at — not baked into `merge.reason` itself, which
|
|
1139
|
+
# `coord.queue_diagnose`'s `_gates()` probe also surfaces
|
|
1140
|
+
# verbatim with no such line above it.
|
|
1141
|
+
if (
|
|
1142
|
+
merge_queue_decision is not None
|
|
1143
|
+
and merge_queue_decision.state in ("HUMAN_REQUIRED", "SKIPPED")
|
|
1144
|
+
):
|
|
1145
|
+
lines.append(
|
|
1146
|
+
" (see the merge-queue line above for detail"
|
|
1147
|
+
+ (
|
|
1148
|
+
" — the latched time and the override command)"
|
|
1149
|
+
if merge_queue_decision.state == "HUMAN_REQUIRED"
|
|
1150
|
+
else ")"
|
|
1151
|
+
)
|
|
1152
|
+
)
|
|
944
1153
|
# #3236: only printed when a --hold-after deploy gate actually
|
|
945
1154
|
# exists for this (repo, issue) — see `_apply_gate_decision`.
|
|
946
1155
|
apply_ = by_gate.get("apply")
|
|
@@ -3809,9 +3809,14 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
3809
3809
|
except Exception: # noqa: BLE001
|
|
3810
3810
|
board, config = None, None
|
|
3811
3811
|
elif stale_rebase_mismatch:
|
|
3812
|
-
#
|
|
3813
|
-
#
|
|
3814
|
-
#
|
|
3812
|
+
# #3444: board/config ARE needed here now — a stale-rebase
|
|
3813
|
+
# mismatch escalates to the ORDINARY conflict-fix path
|
|
3814
|
+
# (`_try_ordinary_escalation_after_stale_mismatch`) inside
|
|
3815
|
+
# `on_conflict_fix_done`, not straight to HUMAN_REQUIRED.
|
|
3816
|
+
# Without them that escalation call returns `None`
|
|
3817
|
+
# immediately and this — the operationally dominant path,
|
|
3818
|
+
# per the comment above — would reproduce #3444's exact bug
|
|
3819
|
+
# on every stale-rebase-mismatch it sees.
|
|
3815
3820
|
progress = entry.get("progress") or {}
|
|
3816
3821
|
stuck_summary = progress.get("stuck")
|
|
3817
3822
|
if not stuck_summary and log_path:
|
|
@@ -3820,6 +3825,13 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
3820
3825
|
stuck_summary = parse_progress(log_path).stuck
|
|
3821
3826
|
except Exception: # noqa: BLE001
|
|
3822
3827
|
stuck_summary = None
|
|
3828
|
+
try:
|
|
3829
|
+
from coord.board_service import read_board # noqa: PLC0415
|
|
3830
|
+
from coord.config import load as _load_config # noqa: PLC0415
|
|
3831
|
+
board = read_board()
|
|
3832
|
+
config = _load_config()
|
|
3833
|
+
except Exception: # noqa: BLE001
|
|
3834
|
+
board, config = None, None
|
|
3823
3835
|
|
|
3824
3836
|
on_conflict_fix_done(
|
|
3825
3837
|
parent_assignment_id=parent_id,
|
|
@@ -2978,6 +2978,67 @@ def _try_semantic_escalation(
|
|
|
2978
2978
|
return None
|
|
2979
2979
|
|
|
2980
2980
|
|
|
2981
|
+
def _try_ordinary_escalation_after_stale_mismatch(
|
|
2982
|
+
entry: mq.QueuedMerge,
|
|
2983
|
+
*,
|
|
2984
|
+
board: Board | None,
|
|
2985
|
+
config: Config | None,
|
|
2986
|
+
machine_name: str,
|
|
2987
|
+
stuck_summary: str | None,
|
|
2988
|
+
) -> "Assignment | None":
|
|
2989
|
+
"""Dispatch the ordinary conflict-fix path after a stale-rebase
|
|
2990
|
+
worker's ``stale-rebase-mismatch`` refusal (#3444).
|
|
2991
|
+
|
|
2992
|
+
A ``stale-rebase-mismatch`` verdict means the ``checks_stale`` premise
|
|
2993
|
+
that triggered the stale-rebase dispatch was wrong — the rebase hit a
|
|
2994
|
+
genuine content conflict, not just a moved base. That makes this an
|
|
2995
|
+
ORDINARY conflict, so it deserves the ordinary #241 conflict-fix
|
|
2996
|
+
worker's mechanical/additive attempt (and its own
|
|
2997
|
+
``SEMANTIC_STUCK_MARKER`` → escalation-or-HUMAN_REQUIRED handling on a
|
|
2998
|
+
second failure) before anything goes to a human — not an immediate
|
|
2999
|
+
HUMAN_REQUIRED, which is what happened before this fix.
|
|
3000
|
+
|
|
3001
|
+
Returns the dispatched Assignment, or ``None`` when the plumbing isn't
|
|
3002
|
+
available or dispatch declined for any of the ordinary reasons (no
|
|
3003
|
+
capable machine, already active, retry cap already consumed by a prior
|
|
3004
|
+
*ordinary* attempt, …) — every ``None`` case falls through to the
|
|
3005
|
+
caller's pre-#3444 HUMAN_REQUIRED behaviour.
|
|
3006
|
+
|
|
3007
|
+
Deliberately does NOT gate on a config flag the way
|
|
3008
|
+
:func:`_try_semantic_escalation` gates on
|
|
3009
|
+
``pipeline.escalate_semantic_conflicts`` — unlike a semantic escalation
|
|
3010
|
+
to a stronger model, this is just the ordinary conflict-fix path that
|
|
3011
|
+
every other conflict already gets; there is no reason to withhold it
|
|
3012
|
+
here specifically.
|
|
3013
|
+
"""
|
|
3014
|
+
if board is None or config is None:
|
|
3015
|
+
return None
|
|
3016
|
+
|
|
3017
|
+
from coord.conflict_fix import dispatch_conflict_fix # noqa: PLC0415
|
|
3018
|
+
from coord.network import fetch_status # noqa: PLC0415
|
|
3019
|
+
|
|
3020
|
+
try:
|
|
3021
|
+
return dispatch_conflict_fix(
|
|
3022
|
+
entry,
|
|
3023
|
+
board,
|
|
3024
|
+
config,
|
|
3025
|
+
prefer_machine=machine_name or None,
|
|
3026
|
+
after_stale_rebase_mismatch=True,
|
|
3027
|
+
stuck_summary=stuck_summary,
|
|
3028
|
+
# #3353: same liveness-aware selection every other call site
|
|
3029
|
+
# here uses — a dead machine with zero active assignments must
|
|
3030
|
+
# not be picked first just because it looks idle on the board.
|
|
3031
|
+
status_fetcher=fetch_status,
|
|
3032
|
+
)
|
|
3033
|
+
except Exception as exc: # noqa: BLE001 — never break reconcile on this
|
|
3034
|
+
import logging # noqa: PLC0415
|
|
3035
|
+
logging.warning(
|
|
3036
|
+
"stale-rebase-mismatch → ordinary conflict-fix escalation "
|
|
3037
|
+
"dispatch failed: %s", exc,
|
|
3038
|
+
)
|
|
3039
|
+
return None
|
|
3040
|
+
|
|
3041
|
+
|
|
2981
3042
|
def on_conflict_fix_done(
|
|
2982
3043
|
*,
|
|
2983
3044
|
parent_assignment_id: str,
|
|
@@ -2998,16 +3059,21 @@ def on_conflict_fix_done(
|
|
|
2998
3059
|
can surface "manual resolution required", and a comment is posted on
|
|
2999
3060
|
the underlying issue so the user is notified outside the TUI too.
|
|
3000
3061
|
|
|
3001
|
-
*stale_rebase_mismatch* (#3349 review): when
|
|
3002
|
-
worker (dispatched for
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3062
|
+
*stale_rebase_mismatch* (#3349 review, escalation added #3444): when
|
|
3063
|
+
``True``, a stale-rebase worker (dispatched for
|
|
3064
|
+
``merge_gate_checks_stale``, not an ordinary conflict) correctly
|
|
3065
|
+
refused to push per its own briefing's "When NOT to guess" section —
|
|
3066
|
+
its rebase either hit a real conflict marker or produced a different
|
|
3067
|
+
patch-id than the pre-rebase branch, so it is not a pure
|
|
3068
|
+
content-preserving rebase. That means the *just-stale* premise behind
|
|
3069
|
+
the stale-rebase dispatch was wrong — this is an ORDINARY conflict, so
|
|
3070
|
+
it gets the ordinary #241 conflict-fix worker's mechanical/additive
|
|
3071
|
+
attempt (:func:`_try_ordinary_escalation_after_stale_mismatch`) before
|
|
3072
|
+
anything reaches a human, exactly like any other conflict. Only when
|
|
3073
|
+
THAT dispatch itself declines (no capable machine, already active,
|
|
3074
|
+
retry cap consumed, …) does the entry land on HUMAN_REQUIRED — #3349's
|
|
3075
|
+
safety property (the stale-rebase worker itself never resolves
|
|
3076
|
+
anything) is unaffected either way.
|
|
3011
3077
|
|
|
3012
3078
|
#2566: when *semantic* is ``True`` and the tier-2 escalation didn't
|
|
3013
3079
|
fire specifically because ``pipeline.escalate_semantic_conflicts`` is
|
|
@@ -3058,24 +3124,54 @@ def on_conflict_fix_done(
|
|
|
3058
3124
|
)
|
|
3059
3125
|
failed_entry = entry
|
|
3060
3126
|
elif stale_rebase_mismatch:
|
|
3061
|
-
# #
|
|
3062
|
-
#
|
|
3063
|
-
#
|
|
3064
|
-
#
|
|
3065
|
-
#
|
|
3066
|
-
|
|
3127
|
+
# #3444: a stale-rebase worker's refusal means the
|
|
3128
|
+
# "just-stale" premise was wrong — this is a genuine
|
|
3129
|
+
# content conflict, i.e. an ORDINARY conflict, so it gets
|
|
3130
|
+
# the ordinary #241 conflict-fix worker's mechanical
|
|
3131
|
+
# attempt before anything reaches a human (previously this
|
|
3132
|
+
# skipped straight to HUMAN_REQUIRED — #3444's bug).
|
|
3067
3133
|
detail = stuck_summary or (
|
|
3068
3134
|
"rebase was not content-preserving (a conflict marker "
|
|
3069
3135
|
"appeared, or the resulting patch-id differed from the "
|
|
3070
3136
|
"pre-rebase branch's)"
|
|
3071
3137
|
)
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3138
|
+
fix = _try_ordinary_escalation_after_stale_mismatch(
|
|
3139
|
+
entry,
|
|
3140
|
+
board=board,
|
|
3141
|
+
config=config,
|
|
3142
|
+
machine_name=machine_name,
|
|
3143
|
+
stuck_summary=stuck_summary,
|
|
3077
3144
|
)
|
|
3078
|
-
|
|
3145
|
+
if fix is not None:
|
|
3146
|
+
# Stay in CONFLICT, not HUMAN_REQUIRED — the ordinary
|
|
3147
|
+
# conflict-fix worker is now in flight. If it also
|
|
3148
|
+
# fails (or itself judges the conflict SEMANTIC), this
|
|
3149
|
+
# hook runs again with `stale_rebase_mismatch=False`
|
|
3150
|
+
# and the ordinary/semantic-escalation-or-HUMAN_REQUIRED
|
|
3151
|
+
# logic below applies exactly as it does for any other
|
|
3152
|
+
# conflict.
|
|
3153
|
+
entry.state = mq.CONFLICT
|
|
3154
|
+
entry.error = (
|
|
3155
|
+
f"{existing_error}; stale-rebase worker refused to "
|
|
3156
|
+
f"push: {detail}. Not a stale-base mismatch after "
|
|
3157
|
+
"all — this is a genuine content conflict, "
|
|
3158
|
+
f"escalated to an ordinary conflict-fix (assignment "
|
|
3159
|
+
f"{fix.assignment_id}) on {fix.machine_name}."
|
|
3160
|
+
)
|
|
3161
|
+
else:
|
|
3162
|
+
# The ordinary escalation itself declined (no capable
|
|
3163
|
+
# machine, already active, retry cap already consumed
|
|
3164
|
+
# by a prior ordinary attempt, …) — fall through to
|
|
3165
|
+
# HUMAN_REQUIRED exactly like the pre-#3444 behaviour.
|
|
3166
|
+
entry.state = mq.HUMAN_REQUIRED
|
|
3167
|
+
entry.error = (
|
|
3168
|
+
f"{existing_error}; stale-rebase worker refused to "
|
|
3169
|
+
f"push: {detail}. This is a genuine content conflict "
|
|
3170
|
+
"against the new base, not a pure rebase, and the "
|
|
3171
|
+
"ordinary conflict-fix escalation could not be "
|
|
3172
|
+
"dispatched either — manual resolution required."
|
|
3173
|
+
)
|
|
3174
|
+
failed_entry = entry
|
|
3079
3175
|
else:
|
|
3080
3176
|
# #1291: a SEMANTIC give-up gets ONE escalated attempt from a
|
|
3081
3177
|
# stronger model before the entry is parked. Everything
|