code-coordinator 0.5.521__tar.gz → 0.5.522__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.521 → code_coordinator-0.5.522}/PKG-INFO +1 -1
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/drive_queue.py +62 -5
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/drive_queue.py +85 -5
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notify.py +69 -2
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_queue.py +120 -1
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_stalled_pipeline.py +132 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/.gitignore +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/CLAUDE.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/GOAL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/LICENSE +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/MANIFEST.in +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/README.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/__init__.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/agent.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/audit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/backup.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/block_log.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/board_service.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/brain.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/claim.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/cli.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/client.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/codegen.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/comments.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/config.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dao.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/db.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/deps.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/drive.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/events.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/filelock.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/freshness.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/gates.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/goal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/context.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/models.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/render.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/health/units.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/hooks.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/interactive.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/models.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/network.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/openapi.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/parentage.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/plans.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/progress.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/release_window.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/reports.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/review.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/self_health.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/smoke.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/split_work.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/sql.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/state.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/test_author.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/test_report.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/usage.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/install-agent.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/pyproject.toml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/setup.cfg +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/__init__.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/backends.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/conftest.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_client.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_config.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_db.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_events.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_init.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_models.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_network.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_review.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_session.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_split.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_state.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.521 → code_coordinator-0.5.522}/tests/write_parity.py +0 -0
|
@@ -35,7 +35,7 @@ import socket
|
|
|
35
35
|
import subprocess
|
|
36
36
|
import time
|
|
37
37
|
from pathlib import Path
|
|
38
|
-
from typing import TYPE_CHECKING, Any, Mapping, Sequence
|
|
38
|
+
from typing import TYPE_CHECKING, Any, Iterable, Mapping, Sequence
|
|
39
39
|
|
|
40
40
|
import click
|
|
41
41
|
|
|
@@ -88,6 +88,7 @@ from coord.drive_queue import (
|
|
|
88
88
|
fired_holds,
|
|
89
89
|
flag_shadows_config_warning,
|
|
90
90
|
is_dispatch_failure_reason,
|
|
91
|
+
is_fix_round_ceiling_blocked,
|
|
91
92
|
is_merge_gate_block_reason,
|
|
92
93
|
is_permanent_block_reason,
|
|
93
94
|
is_pre_dispatch_block_reason,
|
|
@@ -1386,10 +1387,10 @@ _BLOCKED_AFTER_NOTE = (
|
|
|
1386
1387
|
# ships doesn't have to go read the issue to learn their remove+add might be
|
|
1387
1388
|
# about to race an automatic resume.
|
|
1388
1389
|
_BLOCKED_GATE_NOTE = (
|
|
1389
|
-
"note: a re-evaluable blocked cause (i.e. not a #1844/#2019
|
|
1390
|
-
"refusal) IS re-checked against the merge gate automatically
|
|
1391
|
-
"see `resumes=` above if this row has already self-resumed
|
|
1392
|
-
"re-blocked"
|
|
1390
|
+
"note: a re-evaluable blocked cause (i.e. not a #1844/#2019/#2972 "
|
|
1391
|
+
"permanent refusal) IS re-checked against the merge gate automatically "
|
|
1392
|
+
"(#2230) — see `resumes=` above if this row has already self-resumed "
|
|
1393
|
+
"and re-blocked"
|
|
1393
1394
|
)
|
|
1394
1395
|
|
|
1395
1396
|
# #2589: `_BLOCKED_GATE_NOTE` above is flatly wrong for a row whose cause is
|
|
@@ -5576,6 +5577,34 @@ def _record_checks_stale_escalation(entry: "QueuedMerge", *, reason: str) -> Non
|
|
|
5576
5577
|
click.echo(f" (could not record the checks_stale escalation: {exc})")
|
|
5577
5578
|
|
|
5578
5579
|
|
|
5580
|
+
def _fix_round_ceiling_blocked_keys(
|
|
5581
|
+
queue_entries: Iterable[QueueEntry],
|
|
5582
|
+
) -> set[tuple[str, int]]:
|
|
5583
|
+
"""#3454: ``(repo, issue)`` keys whose drive-queue row has already given
|
|
5584
|
+
up on the #2972 fix-round ceiling — a block means stop: nothing this
|
|
5585
|
+
module auto-dispatches should fire again for one of these until an
|
|
5586
|
+
operator runs ``coord drive-queue remove`` + ``add``.
|
|
5587
|
+
|
|
5588
|
+
Delegates the actual predicate to :func:`coord.drive_queue.
|
|
5589
|
+
is_fix_round_ceiling_blocked` — the #3454 review's "one question, one
|
|
5590
|
+
answer" fix: ``coord.notify``'s stalled-pipeline sweep (a second,
|
|
5591
|
+
independent ``dispatch_conflict_fix`` caller) asks this SAME function
|
|
5592
|
+
per-row rather than re-deriving the ``state == blocked AND
|
|
5593
|
+
is_fix_round_ceiling_reason`` check here a second time.
|
|
5594
|
+
|
|
5595
|
+
Pure, over an already-fetched entry list, so
|
|
5596
|
+
``_run_auto_revalidate_checks_stale``'s use of it (skip a
|
|
5597
|
+
stale-rebase conflict-fix candidate whose OWN entry gave up this way) is
|
|
5598
|
+
testable without mocking the live board/ci_store/conflict_fix stack that
|
|
5599
|
+
function otherwise needs.
|
|
5600
|
+
"""
|
|
5601
|
+
return {
|
|
5602
|
+
(e.repo, e.issue)
|
|
5603
|
+
for e in queue_entries
|
|
5604
|
+
if is_fix_round_ceiling_blocked(e.state, e.last_reason)
|
|
5605
|
+
}
|
|
5606
|
+
|
|
5607
|
+
|
|
5579
5608
|
def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
5580
5609
|
"""#2535: unattended remedy for merge-queue entries blocked SOLELY on
|
|
5581
5610
|
stale CI checks against an already-approved review — closing the gap
|
|
@@ -5720,6 +5749,7 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
5720
5749
|
from coord.state import ( # noqa: PLC0415
|
|
5721
5750
|
dismiss_drive_escalation,
|
|
5722
5751
|
list_drive_escalations,
|
|
5752
|
+
list_drive_queue,
|
|
5723
5753
|
load_board as _load_board,
|
|
5724
5754
|
)
|
|
5725
5755
|
|
|
@@ -5743,6 +5773,33 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
5743
5773
|
return
|
|
5744
5774
|
items = _mq.load_queue()
|
|
5745
5775
|
candidates = _mq.ci_revalidation_candidates(items, board, cfg, ci_store, _gh_ops)
|
|
5776
|
+
# #3454: an entry whose drive-queue row already gave up on the #2972
|
|
5777
|
+
# fix-round ceiling is PARKED — a block means stop, not "the driver
|
|
5778
|
+
# stopped but the pipeline is still live" (quadraui#1077: a
|
|
5779
|
+
# stale-rebase conflict-fix from THIS mechanism fired 6h07m after the
|
|
5780
|
+
# ceiling block, one of the paid legs the block's own "giving up"
|
|
5781
|
+
# wording told the operator would not happen). Filtered out of
|
|
5782
|
+
# `candidates` itself, not just the dispatch loop below, so the
|
|
5783
|
+
# escalation-cleanup pass right above also treats a newly-parked
|
|
5784
|
+
# entry as no-longer-live and dismisses any open `checks_stale`
|
|
5785
|
+
# escalation for it — the ceiling block's own reason is the one
|
|
5786
|
+
# surface an operator needs, not a second "needs a human" this
|
|
5787
|
+
# mechanism would otherwise keep alive for a row that already has
|
|
5788
|
+
# one. `is_fix_round_ceiling_blocked` (not the broader
|
|
5789
|
+
# `is_permanent_block_reason`) so a #1844/#2019 permanent block —
|
|
5790
|
+
# neither of which this mechanism has ever been asked to change —
|
|
5791
|
+
# keeps its pre-#3454 behaviour exactly. `coord.notify`'s stalled-
|
|
5792
|
+
# pipeline sweep — the THIRD, independent `dispatch_conflict_fix`
|
|
5793
|
+
# caller the #3454 review found unfiltered — now calls this exact
|
|
5794
|
+
# same predicate per-row rather than a separately-derived check.
|
|
5795
|
+
ceiling_blocked_keys = _fix_round_ceiling_blocked_keys(
|
|
5796
|
+
entries_from_rows(list_drive_queue())
|
|
5797
|
+
)
|
|
5798
|
+
candidates = [
|
|
5799
|
+
c
|
|
5800
|
+
for c in candidates
|
|
5801
|
+
if (c.repo_name, c.issue_number) not in ceiling_blocked_keys
|
|
5802
|
+
]
|
|
5746
5803
|
except Exception: # noqa: BLE001 — best-effort, see docstring
|
|
5747
5804
|
return
|
|
5748
5805
|
|
|
@@ -160,9 +160,10 @@ def dispatch_type_for_labels(issue_labels: Iterable[str] | None) -> str:
|
|
|
160
160
|
#
|
|
161
161
|
# #2230 qualifies "terminal" for `blocked` specifically: it still means "no
|
|
162
162
|
# `coord drive` launches from this row again on its own" and "stays in the
|
|
163
|
-
# table for history" for a PERMANENT cause (#1844/#2019
|
|
164
|
-
# no evidence about. It no
|
|
165
|
-
# again" — a `blocked` entry
|
|
163
|
+
# table for history" for a PERMANENT cause (#1844/#2019/#2972 — see
|
|
164
|
+
# `_PERMANENT_BLOCK_MARKERS`) or one the sweep has no evidence about. It no
|
|
165
|
+
# longer means "nothing ever writes to this row again" — a `blocked` entry
|
|
166
|
+
# whose cause was a re-evaluable gate reading may
|
|
166
167
|
# be moved straight back to `waiting` by `plan_tick`'s own reconcile pass,
|
|
167
168
|
# with no operator action, the moment that reading clears. See
|
|
168
169
|
# `is_permanent_block_reason` and `_reconcile_blocked` below for exactly
|
|
@@ -282,7 +283,74 @@ PARK_STALE_SECONDS = 45 * 60.0
|
|
|
282
283
|
# clear (see `_reconcile_blocked` and the `live_blocked_gate` parameter of
|
|
283
284
|
# `plan_tick`). No evidence either way leaves the entry exactly as untouched
|
|
284
285
|
# as it was before this feature existed.
|
|
285
|
-
|
|
286
|
+
#
|
|
287
|
+
# #3454: `(#2972)` joined this tuple after quadraui#1077 (2026-09-27) showed
|
|
288
|
+
# the gap a THIRD marker was needed for — a #2972 fix-round-ceiling give-up
|
|
289
|
+
# is not like #309's ordinary `exhausted`: relaunching cannot produce more
|
|
290
|
+
# budget no matter how the merge gate reads, so treating it as merely
|
|
291
|
+
# "unlucky, re-check later" let #2230's own sweep silently resume it back to
|
|
292
|
+
# `waiting` (attempts reset to 0!) the moment the gate cleared — handing the
|
|
293
|
+
# exact fresh budget the ceiling exists to deny, from inside the mechanism
|
|
294
|
+
# built to respect it. Marking it permanent here closes that specific hole:
|
|
295
|
+
# `_reconcile_blocked` returns `None` for it unconditionally, same as
|
|
296
|
+
# #1844/#2019, and only an operator's `coord drive-queue remove` + `add`
|
|
297
|
+
# (a fresh row) ever gives this entry another attempt. This
|
|
298
|
+
# does NOT stop the row from being noticed if the issue lands anyway
|
|
299
|
+
# out-of-band — `plan_tick`'s own step-1b `facts.landed` check (#2055/#3368)
|
|
300
|
+
# runs unconditionally for every `blocked` entry regardless of this marker,
|
|
301
|
+
# exactly as it always has; what stops is only the AUTOMATIC relaunch/
|
|
302
|
+
# merge-only paths #2230 gates. See :func:`is_fix_round_ceiling_reason` for
|
|
303
|
+
# the narrower predicate `coord.commands.drive_queue` uses to also stop its
|
|
304
|
+
# OWN independent auto-dispatch (the stale-rebase conflict-fix revalidation)
|
|
305
|
+
# from re-firing against a row that has already given up this way.
|
|
306
|
+
_PERMANENT_BLOCK_MARKERS: tuple[str, ...] = ("(#1844)", "(#2019)", "(#2972)")
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def is_fix_round_ceiling_reason(reason: str | None) -> bool:
|
|
310
|
+
"""#3454: does *reason* name the #2972 fix-round-ceiling give-up — the
|
|
311
|
+
``_reconcile_running`` "giving up rather than relaunching with a fresh
|
|
312
|
+
budget" branch, below?
|
|
313
|
+
|
|
314
|
+
Marker-based, same convention as :func:`is_permanent_block_reason` (whose
|
|
315
|
+
``_PERMANENT_BLOCK_MARKERS`` this reuses the same ``(#2972)`` text for):
|
|
316
|
+
the branch that writes this reason stamps the marker unconditionally, so
|
|
317
|
+
a substring check is exact, not a heuristic guess. A dedicated predicate
|
|
318
|
+
rather than reusing ``is_permanent_block_reason`` directly because a
|
|
319
|
+
caller outside this module (``coord.commands.drive_queue``'s stale-rebase
|
|
320
|
+
auto-revalidation, #3454) wants to ask SPECIFICALLY "did this entry give
|
|
321
|
+
up on the fix-round ceiling", not the broader "is this blocked for any
|
|
322
|
+
permanent reason" — conflating the two would silently widen that other
|
|
323
|
+
caller's behaviour to #1844/#2019 rows too, which nothing in #3454 asked
|
|
324
|
+
for and nothing has verified is safe.
|
|
325
|
+
"""
|
|
326
|
+
if not reason:
|
|
327
|
+
return False
|
|
328
|
+
return "(#2972)" in reason
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
def is_fix_round_ceiling_blocked(state: str | None, last_reason: str | None) -> bool:
|
|
332
|
+
"""#3454 review: the ONE predicate every auto-dispatcher must consult
|
|
333
|
+
before firing against a (repo, issue) — "has this row's drive-queue
|
|
334
|
+
entry already given up on the #2972 fix-round ceiling".
|
|
335
|
+
|
|
336
|
+
The review that opened this function found TWO independent
|
|
337
|
+
``dispatch_conflict_fix`` callers deciding this question with different
|
|
338
|
+
logic: ``coord.commands.drive_queue``'s stale-rebase auto-revalidation
|
|
339
|
+
checked it, ``coord.notify``'s stalled-pipeline sweep (a third,
|
|
340
|
+
pre-existing caller of the same worker) did not — so a
|
|
341
|
+
``(#2972)``-blocked entry could still receive a brand-new conflict-fix
|
|
342
|
+
leg via the second path, entirely unaffected by the first fix. Both now
|
|
343
|
+
call this one function instead of each re-deriving "blocked AND
|
|
344
|
+
:func:`is_fix_round_ceiling_reason`" — the "one question, one answer"
|
|
345
|
+
rule this module already applies elsewhere (#2096/#2085).
|
|
346
|
+
|
|
347
|
+
``state`` must be the LIVE state (:data:`STATE_BLOCKED`, not merely "the
|
|
348
|
+
reason string looks like a ceiling give-up") — a row that has since been
|
|
349
|
+
removed/re-added by an operator (the documented remedy) has a fresh
|
|
350
|
+
``last_reason`` from a NEW life, but a stale caller that only checked the
|
|
351
|
+
reason string could still misfire against the archived one.
|
|
352
|
+
"""
|
|
353
|
+
return state == STATE_BLOCKED and is_fix_round_ceiling_reason(last_reason)
|
|
286
354
|
|
|
287
355
|
|
|
288
356
|
def is_permanent_block_reason(text: str | None) -> bool:
|
|
@@ -5112,13 +5180,25 @@ def _reconcile_running(
|
|
|
5112
5180
|
# ran.
|
|
5113
5181
|
budget = total_fix_round_budget(entry, fix_round_config_default)
|
|
5114
5182
|
if remaining_fix_rounds(entry, facts, fix_round_config_default) <= 0:
|
|
5183
|
+
# #3454: this block now DOES mean "stop" — see
|
|
5184
|
+
# `_PERMANENT_BLOCK_MARKERS`'s `(#2972)` entry and
|
|
5185
|
+
# `is_fix_round_ceiling_reason` above for the mechanics. Say so
|
|
5186
|
+
# explicitly rather than leaving an operator to infer it: quadraui#1077
|
|
5187
|
+
# showed a bare "giving up" read as "nothing more will happen or be
|
|
5188
|
+
# spent" while the fleet kept dispatching paid legs against the same
|
|
5189
|
+
# branch for hours.
|
|
5115
5190
|
reason = (
|
|
5116
5191
|
f"fix-round ceiling reached across relaunches (#2972): "
|
|
5117
5192
|
f"{facts.work_leg_count} work leg(s) already run against a "
|
|
5118
5193
|
f"budget of {budget} (1 work dispatch + "
|
|
5119
5194
|
f"{effective_max_fix_rounds(entry, fix_round_config_default)} fix "
|
|
5120
5195
|
f"round(s)) — giving up rather than relaunching with a fresh "
|
|
5121
|
-
f"budget{dispatch_note}"
|
|
5196
|
+
f"budget{dispatch_note}. Stopped (#3454): no further relaunch, "
|
|
5197
|
+
f"gate-clear resume, or auto-dispatched stale-rebase conflict-fix "
|
|
5198
|
+
f"(from any of this fleet's independent dispatchers) will fire "
|
|
5199
|
+
f"for this entry — `coord drive-queue remove {entry.repo} "
|
|
5200
|
+
f"{entry.issue}` + `add` (a fresh row) is the only way to give "
|
|
5201
|
+
f"it another attempt."
|
|
5122
5202
|
)
|
|
5123
5203
|
return (
|
|
5124
5204
|
Reconcile(entry.key, "exhausted", reason, occupies=False),
|
|
@@ -1069,6 +1069,14 @@ class StalledDispatchAction:
|
|
|
1069
1069
|
(#602).
|
|
1070
1070
|
- ``"skipped_human_required"`` — the conflict-fix retry cap was already
|
|
1071
1071
|
hit; surfacing to a human, not auto-retrying.
|
|
1072
|
+
- ``"skipped_fix_round_ceiling_blocked"`` (#3454) — ``merge_conflict_
|
|
1073
|
+
unresolved`` or ``merge_gate_checks_stale`` on a (repo, issue) whose
|
|
1074
|
+
drive-queue row already gave up on the #2972 fix-round ceiling (see
|
|
1075
|
+
:func:`coord.drive_queue.is_fix_round_ceiling_blocked`) — a block
|
|
1076
|
+
means stop, so this sweep leaves it parked exactly like ``coord.
|
|
1077
|
+
commands.drive_queue``'s stale-rebase auto-revalidation already does,
|
|
1078
|
+
rather than handing it a third independent path to a fresh
|
|
1079
|
+
conflict-fix leg (quadraui#1077).
|
|
1072
1080
|
- ``"skipped_sealed_conflict"`` (#2537, narrowed by #2555) —
|
|
1073
1081
|
``merge_conflict_unresolved`` on a
|
|
1074
1082
|
:data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row whose conflict was
|
|
@@ -1138,6 +1146,35 @@ def _stalled_row_has_live_session(board: "Board", work: "Assignment") -> bool:
|
|
|
1138
1146
|
return False
|
|
1139
1147
|
|
|
1140
1148
|
|
|
1149
|
+
def _fix_round_ceiling_blocked_for_work(work: "Assignment") -> bool:
|
|
1150
|
+
"""#3454 review: true when *work*'s (repo, issue) has a drive-queue row
|
|
1151
|
+
that has already given up on the #2972 fix-round ceiling.
|
|
1152
|
+
|
|
1153
|
+
This module's ``merge_conflict_unresolved`` and ``merge_gate_checks_
|
|
1154
|
+
stale`` arms are a THIRD, independent caller of :func:`coord.
|
|
1155
|
+
conflict_fix.dispatch_conflict_fix` — the review found them unfiltered
|
|
1156
|
+
while ``coord.commands.drive_queue``'s stale-rebase auto-revalidation
|
|
1157
|
+
(the second caller) already skipped a ceiling-blocked candidate,
|
|
1158
|
+
letting quadraui#1077's "giving up" block get a brand-new conflict-fix
|
|
1159
|
+
leg anyway via THIS path 6h07m later. Both callers now ask the exact
|
|
1160
|
+
same question — :func:`coord.drive_queue.is_fix_round_ceiling_blocked`
|
|
1161
|
+
— rather than each re-deriving it (#2096's "one question, one answer").
|
|
1162
|
+
|
|
1163
|
+
A drive-queue row is optional infrastructure (an issue can be worked
|
|
1164
|
+
with no ``coord drive-queue add`` at all), so "no row for this (repo,
|
|
1165
|
+
issue)" reads as "nothing to block on" — ``False`` — same as it always
|
|
1166
|
+
implicitly has for every OTHER stalled-pipeline reason.
|
|
1167
|
+
"""
|
|
1168
|
+
from coord.drive_queue import QueueEntry, is_fix_round_ceiling_blocked # noqa: PLC0415
|
|
1169
|
+
from coord.state import get_drive_queue_entry # noqa: PLC0415
|
|
1170
|
+
|
|
1171
|
+
row = get_drive_queue_entry(work.repo_name, work.issue_number)
|
|
1172
|
+
if row is None:
|
|
1173
|
+
return False
|
|
1174
|
+
dq_entry = QueueEntry.from_row(row)
|
|
1175
|
+
return is_fix_round_ceiling_blocked(dq_entry.state, dq_entry.last_reason)
|
|
1176
|
+
|
|
1177
|
+
|
|
1141
1178
|
def _conflict_confined_to_sealed_paths(
|
|
1142
1179
|
entry: "QueuedMerge", config: Config,
|
|
1143
1180
|
) -> list[str] | None:
|
|
@@ -1230,7 +1267,11 @@ def dispatch_stalled_pipeline_action(
|
|
|
1230
1267
|
the same bulk gate-checked enqueue the daemon passive tick already
|
|
1231
1268
|
runs on every interval.
|
|
1232
1269
|
- ``merge_conflict_unresolved`` → :func:`coord.conflict_fix.dispatch_conflict_fix`,
|
|
1233
|
-
the #1474 ``_dispatch_conflict_fixes`` path — UNLESS (#
|
|
1270
|
+
the #1474 ``_dispatch_conflict_fixes`` path — UNLESS (#3454) the
|
|
1271
|
+
(repo, issue)'s drive-queue row already gave up on the #2972
|
|
1272
|
+
fix-round ceiling (:func:`_fix_round_ceiling_blocked_for_work`),
|
|
1273
|
+
which returns ``"skipped_fix_round_ceiling_blocked"`` instead, or
|
|
1274
|
+
(#2537) *work* is a
|
|
1234
1275
|
:data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row AND the conflict can
|
|
1235
1276
|
be confirmed (via :func:`_conflict_confined_to_sealed_paths`, a
|
|
1236
1277
|
compare-API-only check) to be confined to the repo's sealed
|
|
@@ -1257,7 +1298,9 @@ def dispatch_stalled_pipeline_action(
|
|
|
1257
1298
|
``merge_conflict_unresolved`` dispatches, briefed for a PURE,
|
|
1258
1299
|
content-preserving rebase (no conflict expected) rather than the
|
|
1259
1300
|
ordinary conflict-resolution briefing. Guarded by the same
|
|
1260
|
-
:func:`coord.conflict_fix.has_prior_conflict_fix` retry cap
|
|
1301
|
+
:func:`coord.conflict_fix.has_prior_conflict_fix` retry cap, and
|
|
1302
|
+
(#3454) the same fix-round-ceiling park as ``merge_conflict_
|
|
1303
|
+
unresolved`` above.
|
|
1261
1304
|
|
|
1262
1305
|
Never re-entrant across ticks: the caller only reaches this after
|
|
1263
1306
|
:func:`detect_stalled_pipeline` has already filtered out any row whose
|
|
@@ -1598,6 +1641,18 @@ def dispatch_stalled_pipeline_action(
|
|
|
1598
1641
|
return StalledDispatchAction(
|
|
1599
1642
|
kind="no_action", detail="merge queue entry no longer found",
|
|
1600
1643
|
)
|
|
1644
|
+
# #3454: a #2972 fix-round-ceiling give-up parks the row — no further
|
|
1645
|
+
# auto-dispatched conflict-fix for it from ANY caller, this sweep
|
|
1646
|
+
# included. See `_fix_round_ceiling_blocked_for_work`'s docstring.
|
|
1647
|
+
if _fix_round_ceiling_blocked_for_work(work):
|
|
1648
|
+
return StalledDispatchAction(
|
|
1649
|
+
kind="skipped_fix_round_ceiling_blocked",
|
|
1650
|
+
detail=(
|
|
1651
|
+
"drive-queue row already gave up on the #2972 fix-round "
|
|
1652
|
+
"ceiling (#3454) — parked; needs `coord drive-queue "
|
|
1653
|
+
"remove` + `add`, not another auto-dispatched conflict-fix"
|
|
1654
|
+
),
|
|
1655
|
+
)
|
|
1601
1656
|
if has_prior_conflict_fix(
|
|
1602
1657
|
board, entry.assignment_id, current_error=entry.error,
|
|
1603
1658
|
):
|
|
@@ -1697,6 +1752,18 @@ def dispatch_stalled_pipeline_action(
|
|
|
1697
1752
|
return StalledDispatchAction(
|
|
1698
1753
|
kind="no_action", detail="merge queue entry no longer found",
|
|
1699
1754
|
)
|
|
1755
|
+
# #3454: same park as the `merge_conflict_unresolved` arm above — a
|
|
1756
|
+
# #2972 fix-round-ceiling give-up means stop, including the stale-
|
|
1757
|
+
# rebase conflict-fix this arm dispatches.
|
|
1758
|
+
if _fix_round_ceiling_blocked_for_work(work):
|
|
1759
|
+
return StalledDispatchAction(
|
|
1760
|
+
kind="skipped_fix_round_ceiling_blocked",
|
|
1761
|
+
detail=(
|
|
1762
|
+
"drive-queue row already gave up on the #2972 fix-round "
|
|
1763
|
+
"ceiling (#3454) — parked; needs `coord drive-queue "
|
|
1764
|
+
"remove` + `add`, not another auto-dispatched conflict-fix"
|
|
1765
|
+
),
|
|
1766
|
+
)
|
|
1700
1767
|
if has_prior_conflict_fix(
|
|
1701
1768
|
board, entry.assignment_id, current_error=entry.error,
|
|
1702
1769
|
):
|
|
@@ -4355,6 +4355,78 @@ def test_a_dead_end_blocked_entry_is_never_resumed():
|
|
|
4355
4355
|
assert plan.launch is None
|
|
4356
4356
|
|
|
4357
4357
|
|
|
4358
|
+
def test_a_fix_round_ceiling_blocked_entry_is_never_resumed():
|
|
4359
|
+
"""#3454: same posture as the #1844/#2019 permanent blocks above — a
|
|
4360
|
+
#2972 fix-round-ceiling give-up must not auto-resume just because the
|
|
4361
|
+
merge gate reads clear again. Before this fix, `_reconcile_blocked`
|
|
4362
|
+
treated this reason as an ordinary re-checkable `exhausted` (#309's
|
|
4363
|
+
shape) and would have relaunched with `attempts` reset to 0 — handing
|
|
4364
|
+
the entry a fresh work-leg budget the ceiling exists to deny, exactly
|
|
4365
|
+
the quadraui#625 silent-reset bug #2972 itself closed for the ordinary
|
|
4366
|
+
retry path. Contrast with
|
|
4367
|
+
test_a_blocked_entry_whose_live_gate_reads_clear_resumes_with_attempts_reset,
|
|
4368
|
+
where an entry blocked for an ordinary reason DOES resume on identical
|
|
4369
|
+
gate evidence."""
|
|
4370
|
+
entries = [
|
|
4371
|
+
_blocked_entry(
|
|
4372
|
+
1077,
|
|
4373
|
+
position=1,
|
|
4374
|
+
last_reason=(
|
|
4375
|
+
"fix-round ceiling reached across relaunches (#2972): 3 "
|
|
4376
|
+
"work leg(s) already run against a budget of 3 (1 work "
|
|
4377
|
+
"dispatch + 2 fix round(s)) — giving up rather than "
|
|
4378
|
+
"relaunching with a fresh budget. Stopped (#3454): no "
|
|
4379
|
+
"further relaunch, gate-clear resume, or auto-dispatched "
|
|
4380
|
+
"stale-rebase conflict-fix (from any of this fleet's "
|
|
4381
|
+
"independent dispatchers) will fire for this entry — "
|
|
4382
|
+
"`coord drive-queue remove claude-coordinator 1077` + "
|
|
4383
|
+
"`add` (a fresh row) is the only way to give it another "
|
|
4384
|
+
"attempt."
|
|
4385
|
+
),
|
|
4386
|
+
)
|
|
4387
|
+
]
|
|
4388
|
+
key = entry_key(REPO, 1077)
|
|
4389
|
+
plan = plan_tick(
|
|
4390
|
+
entries,
|
|
4391
|
+
board(),
|
|
4392
|
+
capacity=1,
|
|
4393
|
+
live_blocked_gate={key: False}, # gate reads clear
|
|
4394
|
+
merge_only_ready={key: True}, # even Merge-only-ready must not fire
|
|
4395
|
+
)
|
|
4396
|
+
assert plan.reconciles == ()
|
|
4397
|
+
assert plan.blocked == ()
|
|
4398
|
+
assert plan.merge_only == ()
|
|
4399
|
+
assert plan.launch is None
|
|
4400
|
+
|
|
4401
|
+
|
|
4402
|
+
def test_fix_round_ceiling_blocked_keys_finds_only_2972_blocked_rows():
|
|
4403
|
+
"""#3454: `coord.commands.drive_queue._fix_round_ceiling_blocked_keys` —
|
|
4404
|
+
the filter `_run_auto_revalidate_checks_stale` uses so it never
|
|
4405
|
+
re-dispatches a stale-rebase conflict-fix for an entry that already gave
|
|
4406
|
+
up on the ceiling (quadraui#1077: this mechanism fired one 6h07m after
|
|
4407
|
+
the block). A `waiting`/`running` row and a `blocked` row for an
|
|
4408
|
+
UNRELATED (#1844) reason must both be left out — only a genuinely
|
|
4409
|
+
#2972-blocked row counts."""
|
|
4410
|
+
from coord.commands.drive_queue import _fix_round_ceiling_blocked_keys
|
|
4411
|
+
|
|
4412
|
+
ceiling_reason = (
|
|
4413
|
+
"fix-round ceiling reached across relaunches (#2972): 3 work "
|
|
4414
|
+
"leg(s) already run against a budget of 3 — giving up"
|
|
4415
|
+
)
|
|
4416
|
+
entries = [
|
|
4417
|
+
entry(1077, state=STATE_BLOCKED, last_reason=ceiling_reason),
|
|
4418
|
+
entry(
|
|
4419
|
+
70,
|
|
4420
|
+
state=STATE_BLOCKED,
|
|
4421
|
+
last_reason=(
|
|
4422
|
+
"... (#1844); blocking without spending an attempt"
|
|
4423
|
+
),
|
|
4424
|
+
),
|
|
4425
|
+
entry(309, state=STATE_WAITING, last_reason=""),
|
|
4426
|
+
]
|
|
4427
|
+
assert _fix_round_ceiling_blocked_keys(entries) == {(REPO, 1077)}
|
|
4428
|
+
|
|
4429
|
+
|
|
4358
4430
|
def test_a_blocked_entry_that_has_hit_the_resume_ceiling_stays_blocked_and_says_so():
|
|
4359
4431
|
"""#2230's churn bound: an entry already resumed MAX_BLOCKED_RESUMES times
|
|
4360
4432
|
must not oscillate forever — it stays `blocked`, but `last_reason` is
|
|
@@ -5194,11 +5266,17 @@ def test_a_parked_entry_with_review_still_pending_falls_through_to_the_ordinary_
|
|
|
5194
5266
|
assert plan.launch is not None and plan.launch.issue == 2350
|
|
5195
5267
|
|
|
5196
5268
|
|
|
5197
|
-
def
|
|
5269
|
+
def test_is_permanent_block_reason_recognises_all_three_markers_and_nothing_else():
|
|
5198
5270
|
from coord.drive_queue import is_permanent_block_reason
|
|
5199
5271
|
|
|
5200
5272
|
assert is_permanent_block_reason("... (#1844); blocking without spending an attempt")
|
|
5201
5273
|
assert is_permanent_block_reason("... (#2019); blocking without spending an attempt")
|
|
5274
|
+
# #3454: the #2972 fix-round ceiling joined the permanent set — see
|
|
5275
|
+
# test_a_fix_round_ceiling_block_never_auto_resumes below for why.
|
|
5276
|
+
assert is_permanent_block_reason(
|
|
5277
|
+
"fix-round ceiling reached across relaunches (#2972): 3 work leg(s) "
|
|
5278
|
+
"already run against a budget of 3 — giving up"
|
|
5279
|
+
)
|
|
5202
5280
|
assert not is_permanent_block_reason(
|
|
5203
5281
|
"drive session died without landing the work 2/2 times — giving up"
|
|
5204
5282
|
)
|
|
@@ -5206,6 +5284,47 @@ def test_is_permanent_block_reason_recognises_both_markers_and_nothing_else():
|
|
|
5206
5284
|
assert not is_permanent_block_reason(None)
|
|
5207
5285
|
|
|
5208
5286
|
|
|
5287
|
+
def test_is_fix_round_ceiling_reason_matches_only_the_2972_marker():
|
|
5288
|
+
"""#3454: the narrower predicate `coord.commands.drive_queue` uses to
|
|
5289
|
+
also stop its OWN independent stale-rebase auto-dispatch — must not
|
|
5290
|
+
fire for the OTHER two permanent-block markers, or that other call site
|
|
5291
|
+
would silently widen to #1844/#2019 rows too."""
|
|
5292
|
+
from coord.drive_queue import is_fix_round_ceiling_reason
|
|
5293
|
+
|
|
5294
|
+
assert is_fix_round_ceiling_reason(
|
|
5295
|
+
"fix-round ceiling reached across relaunches (#2972): giving up"
|
|
5296
|
+
)
|
|
5297
|
+
assert not is_fix_round_ceiling_reason(
|
|
5298
|
+
"... (#1844); blocking without spending an attempt"
|
|
5299
|
+
)
|
|
5300
|
+
assert not is_fix_round_ceiling_reason(
|
|
5301
|
+
"... (#2019); blocking without spending an attempt"
|
|
5302
|
+
)
|
|
5303
|
+
assert not is_fix_round_ceiling_reason(
|
|
5304
|
+
"drive session died without landing the work 2/2 times — giving up"
|
|
5305
|
+
)
|
|
5306
|
+
assert not is_fix_round_ceiling_reason("")
|
|
5307
|
+
assert not is_fix_round_ceiling_reason(None)
|
|
5308
|
+
|
|
5309
|
+
|
|
5310
|
+
def test_is_fix_round_ceiling_blocked_requires_both_state_and_reason():
|
|
5311
|
+
"""#3454 review: `is_fix_round_ceiling_blocked` is the ONE predicate
|
|
5312
|
+
`coord.commands.drive_queue` (via `_fix_round_ceiling_blocked_keys`) AND
|
|
5313
|
+
`coord.notify` (via `_fix_round_ceiling_blocked_for_work`) now both
|
|
5314
|
+
call — must require the LIVE `blocked` state, not just a reason string
|
|
5315
|
+
that merely mentions #2972 (e.g. a stale/archived one from a row an
|
|
5316
|
+
operator already removed and re-added)."""
|
|
5317
|
+
from coord.drive_queue import STATE_BLOCKED, STATE_WAITING, is_fix_round_ceiling_blocked
|
|
5318
|
+
|
|
5319
|
+
ceiling_reason = "fix-round ceiling reached across relaunches (#2972): giving up"
|
|
5320
|
+
assert is_fix_round_ceiling_blocked(STATE_BLOCKED, ceiling_reason)
|
|
5321
|
+
assert not is_fix_round_ceiling_blocked(STATE_WAITING, ceiling_reason)
|
|
5322
|
+
assert not is_fix_round_ceiling_blocked(
|
|
5323
|
+
STATE_BLOCKED, "... (#1844); blocking without spending an attempt"
|
|
5324
|
+
)
|
|
5325
|
+
assert not is_fix_round_ceiling_blocked(STATE_BLOCKED, None)
|
|
5326
|
+
|
|
5327
|
+
|
|
5209
5328
|
def test_a_genuinely_dead_drive_without_ci_pending_still_retries_normally():
|
|
5210
5329
|
"""No regression: without `merge_ci_pending`, a dead drive takes the
|
|
5211
5330
|
EXACT pre-#1891 path — this is byte-for-byte
|
|
@@ -1595,6 +1595,138 @@ class TestDispatchPerReason:
|
|
|
1595
1595
|
_, call_kwargs = stub.call_args
|
|
1596
1596
|
assert call_kwargs["stale_rebase"] is True
|
|
1597
1597
|
|
|
1598
|
+
def test_merge_conflict_unresolved_skips_a_fix_round_ceiling_blocked_row(
|
|
1599
|
+
self, config: Config, monkeypatch
|
|
1600
|
+
) -> None:
|
|
1601
|
+
"""#3454 review: `coord.notify` is a THIRD, independent
|
|
1602
|
+
`dispatch_conflict_fix` caller the review found unfiltered — a
|
|
1603
|
+
(repo, issue) whose drive-queue row already gave up on the #2972
|
|
1604
|
+
fix-round ceiling must not get a brand-new conflict-fix leg from
|
|
1605
|
+
THIS sweep either, exactly like `coord.commands.drive_queue`'s
|
|
1606
|
+
stale-rebase auto-revalidation already refuses it."""
|
|
1607
|
+
config.pipeline.auto_dispatch_stalled = True
|
|
1608
|
+
board = _board(
|
|
1609
|
+
_work("work-1", test_state="passed"),
|
|
1610
|
+
_review("work-1", aid="review-1", review_verdict="approve"),
|
|
1611
|
+
)
|
|
1612
|
+
queued = [QueuedMerge(
|
|
1613
|
+
assignment_id="work-1", repo_name="vimcode", repo_github="acme/vimcode",
|
|
1614
|
+
branch="issue-602-fix", target_branch="main", issue_number=602,
|
|
1615
|
+
issue_title="t", state=CONFLICT, error="could not be rebased onto main",
|
|
1616
|
+
)]
|
|
1617
|
+
detection, work = notify_mod.detect_stalled_pipeline(
|
|
1618
|
+
config, board=board, merge_queue_items=queued
|
|
1619
|
+
)[0]
|
|
1620
|
+
assert detection.reason == "merge_conflict_unresolved"
|
|
1621
|
+
|
|
1622
|
+
monkeypatch.setattr("coord.merge_queue.load_queue", lambda: queued)
|
|
1623
|
+
monkeypatch.setattr(
|
|
1624
|
+
state_mod,
|
|
1625
|
+
"get_drive_queue_entry",
|
|
1626
|
+
lambda repo_name, issue_number: {
|
|
1627
|
+
"repo_name": repo_name,
|
|
1628
|
+
"issue_number": issue_number,
|
|
1629
|
+
"state": "blocked",
|
|
1630
|
+
"last_reason": (
|
|
1631
|
+
"fix-round ceiling reached across relaunches (#2972): "
|
|
1632
|
+
"3 work leg(s) already run against a budget of 3 — "
|
|
1633
|
+
"giving up rather than relaunching with a fresh budget"
|
|
1634
|
+
),
|
|
1635
|
+
},
|
|
1636
|
+
)
|
|
1637
|
+
stub = MagicMock()
|
|
1638
|
+
monkeypatch.setattr("coord.conflict_fix.dispatch_conflict_fix", stub)
|
|
1639
|
+
|
|
1640
|
+
action = notify_mod.dispatch_stalled_pipeline_action(detection, work, board, config)
|
|
1641
|
+
|
|
1642
|
+
assert action.kind == "skipped_fix_round_ceiling_blocked"
|
|
1643
|
+
assert "#2972" in action.detail
|
|
1644
|
+
stub.assert_not_called()
|
|
1645
|
+
|
|
1646
|
+
def test_merge_gate_checks_stale_skips_a_fix_round_ceiling_blocked_row(
|
|
1647
|
+
self, config: Config, monkeypatch
|
|
1648
|
+
) -> None:
|
|
1649
|
+
"""Same #3454 gate on the `merge_gate_checks_stale` arm — the
|
|
1650
|
+
review named both `coord.notify` call sites."""
|
|
1651
|
+
config.pipeline.auto_dispatch_stalled = True
|
|
1652
|
+
board = _board(
|
|
1653
|
+
_work("work-1", test_state="passed"),
|
|
1654
|
+
_review("work-1", aid="review-1", review_verdict="approve"),
|
|
1655
|
+
)
|
|
1656
|
+
queued = [QueuedMerge(
|
|
1657
|
+
assignment_id="work-1", repo_name="vimcode", repo_github="acme/vimcode",
|
|
1658
|
+
branch="issue-951-fix", target_branch="develop", issue_number=951,
|
|
1659
|
+
issue_title="t", state=PENDING,
|
|
1660
|
+
error=f"{CI_STALE_PREFIX} checks predate the current base",
|
|
1661
|
+
)]
|
|
1662
|
+
detection, work = notify_mod.detect_stalled_pipeline(
|
|
1663
|
+
config, board=board, merge_queue_items=queued
|
|
1664
|
+
)[0]
|
|
1665
|
+
assert detection.reason == "merge_gate_checks_stale"
|
|
1666
|
+
|
|
1667
|
+
monkeypatch.setattr("coord.merge_queue.load_queue", lambda: queued)
|
|
1668
|
+
monkeypatch.setattr(
|
|
1669
|
+
state_mod,
|
|
1670
|
+
"get_drive_queue_entry",
|
|
1671
|
+
lambda repo_name, issue_number: {
|
|
1672
|
+
"repo_name": repo_name,
|
|
1673
|
+
"issue_number": issue_number,
|
|
1674
|
+
"state": "blocked",
|
|
1675
|
+
"last_reason": (
|
|
1676
|
+
"fix-round ceiling reached across relaunches (#2972): "
|
|
1677
|
+
"3 work leg(s) already run against a budget of 3 — "
|
|
1678
|
+
"giving up rather than relaunching with a fresh budget"
|
|
1679
|
+
),
|
|
1680
|
+
},
|
|
1681
|
+
)
|
|
1682
|
+
stub = MagicMock()
|
|
1683
|
+
monkeypatch.setattr("coord.conflict_fix.dispatch_conflict_fix", stub)
|
|
1684
|
+
|
|
1685
|
+
action = notify_mod.dispatch_stalled_pipeline_action(detection, work, board, config)
|
|
1686
|
+
|
|
1687
|
+
assert action.kind == "skipped_fix_round_ceiling_blocked"
|
|
1688
|
+
assert "#2972" in action.detail
|
|
1689
|
+
stub.assert_not_called()
|
|
1690
|
+
|
|
1691
|
+
def test_merge_conflict_unresolved_still_dispatches_when_no_drive_queue_row(
|
|
1692
|
+
self, config: Config, monkeypatch
|
|
1693
|
+
) -> None:
|
|
1694
|
+
"""No drive-queue row at all for this (repo, issue) (an issue can be
|
|
1695
|
+
worked with no `coord drive-queue add`) must read as "nothing to
|
|
1696
|
+
block on", same as before #3454 — not silently swallow every
|
|
1697
|
+
conflict-fix dispatch that has no queue entry."""
|
|
1698
|
+
config.pipeline.auto_dispatch_stalled = True
|
|
1699
|
+
board = _board(
|
|
1700
|
+
_work("work-1", test_state="passed"),
|
|
1701
|
+
_review("work-1", aid="review-1", review_verdict="approve"),
|
|
1702
|
+
)
|
|
1703
|
+
queued = [QueuedMerge(
|
|
1704
|
+
assignment_id="work-1", repo_name="vimcode", repo_github="acme/vimcode",
|
|
1705
|
+
branch="issue-602-fix", target_branch="main", issue_number=602,
|
|
1706
|
+
issue_title="t", state=CONFLICT, error="could not be rebased onto main",
|
|
1707
|
+
)]
|
|
1708
|
+
detection, work = notify_mod.detect_stalled_pipeline(
|
|
1709
|
+
config, board=board, merge_queue_items=queued
|
|
1710
|
+
)[0]
|
|
1711
|
+
assert detection.reason == "merge_conflict_unresolved"
|
|
1712
|
+
|
|
1713
|
+
fix_assignment = Assignment(
|
|
1714
|
+
machine_name="mac-mini", repo_name="vimcode", issue_number=602,
|
|
1715
|
+
issue_title="[conflict-fix] t", assignment_id="cf-1", status="pending",
|
|
1716
|
+
type="conflict-fix",
|
|
1717
|
+
)
|
|
1718
|
+
stub = MagicMock(return_value=fix_assignment)
|
|
1719
|
+
monkeypatch.setattr("coord.conflict_fix.dispatch_conflict_fix", stub)
|
|
1720
|
+
monkeypatch.setattr("coord.merge_queue.load_queue", lambda: queued)
|
|
1721
|
+
monkeypatch.setattr(
|
|
1722
|
+
state_mod, "get_drive_queue_entry", lambda repo_name, issue_number: None,
|
|
1723
|
+
)
|
|
1724
|
+
|
|
1725
|
+
action = notify_mod.dispatch_stalled_pipeline_action(detection, work, board, config)
|
|
1726
|
+
|
|
1727
|
+
assert action.kind == "conflict_fix_dispatched"
|
|
1728
|
+
stub.assert_called_once()
|
|
1729
|
+
|
|
1598
1730
|
def test_conflict_fix_decline_reports_the_real_reason(
|
|
1599
1731
|
self, config: Config, monkeypatch
|
|
1600
1732
|
) -> None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|