code-coordinator 0.5.211__tar.gz → 0.5.214__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.211 → code_coordinator-0.5.214}/PKG-INFO +1 -1
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/drive_queue.py +165 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notify.py +108 -7
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ORACLE_LOOP.md +10 -2
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_drive_queue.py +143 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_stalled_pipeline.py +272 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_thin_client_board_audit.py +16 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/dialogs.rs +44 -7
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/pipeline.rs +630 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/tests.rs +435 -1
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/commands.rs +312 -4
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/.gitignore +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/CLAUDE.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/GOAL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/LICENSE +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/MANIFEST.in +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/README.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/__init__.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agent.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/audit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/block_log.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/board_service.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/brain.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/claim.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/cli.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/client.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/comments.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/config.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dao.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/db.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/deps.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/drive.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/events.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/filelock.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/freshness.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/gates.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/goal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/context.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/models.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/render.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/health/units.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/hooks.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/interactive.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/models.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/network.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/openapi.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/parentage.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/plans.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/progress.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/release_window.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/reports.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/review.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/self_health.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/smoke.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/split_work.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/state.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/test_author.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/test_report.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/usage.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/install-agent.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/pyproject.toml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/setup.cfg +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/__init__.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/conftest.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_db.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_events.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_init.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_models.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_network.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_session.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_split.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_state.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.211 → code_coordinator-0.5.214}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -2350,6 +2350,162 @@ def _run_merge_only_candidates(plan: TickPlan, config_path: Path | None) -> None
|
|
|
2350
2350
|
click.echo(f"merge-only: {reason}")
|
|
2351
2351
|
|
|
2352
2352
|
|
|
2353
|
+
def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
2354
|
+
"""#2535: best-effort auto-fire of the CI-staleness rerun for merge-queue
|
|
2355
|
+
entries blocked SOLELY on stale CI checks against an already-approved
|
|
2356
|
+
review — closing the gap where nothing periodic ever calls a live
|
|
2357
|
+
``coord merge`` or ``coord merge --revalidate`` on such an entry's
|
|
2358
|
+
behalf, so it just sits until an operator notices ``--dry-run``'s
|
|
2359
|
+
``checks_stale`` line and reruns by hand (the trigger: #2530's Gate-A
|
|
2360
|
+
PR #2534 sat blocked 2026-08-21 on nothing but 210 unrelated merges
|
|
2361
|
+
having landed since its CI last ran).
|
|
2362
|
+
|
|
2363
|
+
Deliberately narrow — this is NOT ``merge.auto_drain`` reopened (that
|
|
2364
|
+
flag stays ``False`` by design; see ``docs/DRIVE_QUEUE.md`` and the
|
|
2365
|
+
2026-06-07 incident it guards against). This step never merges anything
|
|
2366
|
+
and never touches an entry blocked on review, a real CI failure, or a
|
|
2367
|
+
conflict — it only triggers a ``gh run rerun`` for the exact shape
|
|
2368
|
+
:func:`coord.merge_queue.ci_revalidation_candidates` already scopes
|
|
2369
|
+
``--revalidate``'s CI arm to (#1851/#1925): ``PENDING``, review
|
|
2370
|
+
approved, smoke fresh, CI checks green but predating the current base.
|
|
2371
|
+
|
|
2372
|
+
BOUNDED, shared with the live path. Draws from the SAME
|
|
2373
|
+
``ci_stale_reruns``/``MAX_CI_STALE_RERUNS`` budget
|
|
2374
|
+
:func:`coord.merge_queue.process`'s own #2197 auto-rerun already spends
|
|
2375
|
+
from — a live ``coord merge`` attempt and this tick share one ceiling,
|
|
2376
|
+
never two independent ones that could double the effective retry count.
|
|
2377
|
+
An entry that has already exhausted the budget (on a prior live attempt
|
|
2378
|
+
or a prior tick) is left for a human exactly as #2197 already leaves it;
|
|
2379
|
+
this function never fires a further rerun past the cap, though it does
|
|
2380
|
+
keep recording the escalation (below) for as long as the entry stays
|
|
2381
|
+
stuck, so a human watching the audit trail sees it, not just the first
|
|
2382
|
+
tick that hit the ceiling.
|
|
2383
|
+
|
|
2384
|
+
Cost-visible (#1632's posture): every triggered rerun is a real CI run
|
|
2385
|
+
on GitHub's own runners, recorded via :func:`coord.audit.record_audit`
|
|
2386
|
+
(operational tier) so an operator can see the auto-fired count — same
|
|
2387
|
+
spirit as the notifier being advisory rather than silent, never a
|
|
2388
|
+
silent background spend.
|
|
2389
|
+
|
|
2390
|
+
Deliberately NOT behind a new config flag — this reuses exactly the
|
|
2391
|
+
bound and the counter #2197 already established for "an automatic CI
|
|
2392
|
+
rerun triggered by staleness"; the only thing new here is a periodic
|
|
2393
|
+
caller for the case nothing was already about to call ``process()``
|
|
2394
|
+
live. If that judgment turns out to be wrong in practice, the fix is a
|
|
2395
|
+
``merge.auto_revalidate_stale_ci`` off-switch, not removing the
|
|
2396
|
+
dedicated budget this already shares.
|
|
2397
|
+
|
|
2398
|
+
Best-effort like every other optional step in this tick (conflict
|
|
2399
|
+
reconciliation in ``_auto_drain_tick``, the merge-only fast path above):
|
|
2400
|
+
a failure here must never abort the rest of the tick. Skipped entirely
|
|
2401
|
+
on a thin client — this daemon-host tick is the only place it ever
|
|
2402
|
+
runs, same guard :func:`_fetch_live_ci_gate`/
|
|
2403
|
+
:func:`_run_merge_only_candidates` use.
|
|
2404
|
+
"""
|
|
2405
|
+
from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
|
|
2406
|
+
|
|
2407
|
+
if resolve_board_service() is not None:
|
|
2408
|
+
return
|
|
2409
|
+
|
|
2410
|
+
try:
|
|
2411
|
+
from coord import github_ops as _gh_ops # noqa: PLC0415
|
|
2412
|
+
from coord import merge_queue as _mq # noqa: PLC0415
|
|
2413
|
+
from coord.audit import record_audit # noqa: PLC0415
|
|
2414
|
+
from coord.ci_store import build_ci_store # noqa: PLC0415
|
|
2415
|
+
from coord.commands._common import _load_config # noqa: PLC0415
|
|
2416
|
+
from coord.state import load_board as _load_board # noqa: PLC0415
|
|
2417
|
+
|
|
2418
|
+
cfg = _load_config(config_path)
|
|
2419
|
+
board = _load_board()
|
|
2420
|
+
ci_store = build_ci_store(
|
|
2421
|
+
cfg.ci_store.type, host=cfg.ci_store.host, token_env=cfg.ci_store.token_env,
|
|
2422
|
+
)
|
|
2423
|
+
if ci_store is None or not ci_store.is_available:
|
|
2424
|
+
return
|
|
2425
|
+
items = _mq.load_queue()
|
|
2426
|
+
candidates = _mq.ci_revalidation_candidates(items, board, cfg, ci_store, _gh_ops)
|
|
2427
|
+
except Exception: # noqa: BLE001 — best-effort, see docstring
|
|
2428
|
+
return
|
|
2429
|
+
|
|
2430
|
+
if not candidates:
|
|
2431
|
+
return
|
|
2432
|
+
|
|
2433
|
+
touched: list = []
|
|
2434
|
+
for entry in candidates:
|
|
2435
|
+
label = f"{entry.repo_name} #{entry.issue_number} ({entry.branch})"
|
|
2436
|
+
if entry.ci_stale_reruns >= _mq.MAX_CI_STALE_RERUNS:
|
|
2437
|
+
# Budget already spent (on a previous tick, or a previous live
|
|
2438
|
+
# `coord merge` attempt) — #2197's own terminal wording is
|
|
2439
|
+
# already on the entry from whichever call last evaluated it.
|
|
2440
|
+
# Nothing new to trigger; still worth one audit row per tick so
|
|
2441
|
+
# an operator watching the trail sees this has been sitting
|
|
2442
|
+
# exhausted, not silently forgotten.
|
|
2443
|
+
record_audit(
|
|
2444
|
+
tier="operational", category="merge",
|
|
2445
|
+
event_type="merge_checks_stale_auto_revalidate_exhausted",
|
|
2446
|
+
actor="drive-queue-tick",
|
|
2447
|
+
summary=(
|
|
2448
|
+
f"auto-revalidate: {label} still checks_stale after "
|
|
2449
|
+
f"{entry.ci_stale_reruns}/{_mq.MAX_CI_STALE_RERUNS} "
|
|
2450
|
+
"auto-reruns — needs a human (`coord merge --revalidate` "
|
|
2451
|
+
"or `coord merge --only`)"
|
|
2452
|
+
),
|
|
2453
|
+
repo=entry.repo_name, issue=entry.issue_number,
|
|
2454
|
+
assignment_id=entry.assignment_id,
|
|
2455
|
+
details={
|
|
2456
|
+
"pr_number": entry.pr_number,
|
|
2457
|
+
"ci_stale_reruns": entry.ci_stale_reruns,
|
|
2458
|
+
},
|
|
2459
|
+
)
|
|
2460
|
+
continue
|
|
2461
|
+
try:
|
|
2462
|
+
reran = ci_store.rerun_for_pr(entry.repo_github, entry.pr_number)
|
|
2463
|
+
except Exception as exc: # noqa: BLE001 — one entry's failure must not sink the rest
|
|
2464
|
+
click.echo(
|
|
2465
|
+
f"auto-revalidate: could not re-run CI for {label}: {exc}", err=True
|
|
2466
|
+
)
|
|
2467
|
+
continue
|
|
2468
|
+
entry.ci_stale_reruns += 1
|
|
2469
|
+
entry.error = (
|
|
2470
|
+
f"{_mq.CI_PENDING_PREFIX} re-run triggered for CI checks that "
|
|
2471
|
+
"predate the current base (#2535 auto-revalidate "
|
|
2472
|
+
f"{entry.ci_stale_reruns}/{_mq.MAX_CI_STALE_RERUNS} "
|
|
2473
|
+
f"{'triggered' if reran else 'failed to trigger'})"
|
|
2474
|
+
)
|
|
2475
|
+
touched.append(entry)
|
|
2476
|
+
click.echo(
|
|
2477
|
+
f"auto-revalidate: {'triggered' if reran else 'FAILED to trigger'} "
|
|
2478
|
+
f"a CI re-run for {label} (checks_stale, review already approved) "
|
|
2479
|
+
f"— {entry.ci_stale_reruns}/{_mq.MAX_CI_STALE_RERUNS}"
|
|
2480
|
+
)
|
|
2481
|
+
record_audit(
|
|
2482
|
+
tier="operational", category="merge",
|
|
2483
|
+
event_type="merge_checks_stale_auto_revalidate",
|
|
2484
|
+
actor="drive-queue-tick",
|
|
2485
|
+
summary=(
|
|
2486
|
+
f"auto-revalidate: {'triggered' if reran else 'FAILED to trigger'} "
|
|
2487
|
+
f"a CI re-run for {label} — {entry.ci_stale_reruns}/"
|
|
2488
|
+
f"{_mq.MAX_CI_STALE_RERUNS}"
|
|
2489
|
+
),
|
|
2490
|
+
repo=entry.repo_name, issue=entry.issue_number,
|
|
2491
|
+
assignment_id=entry.assignment_id,
|
|
2492
|
+
details={"pr_number": entry.pr_number, "reran": reran},
|
|
2493
|
+
)
|
|
2494
|
+
|
|
2495
|
+
if not touched:
|
|
2496
|
+
return
|
|
2497
|
+
|
|
2498
|
+
try:
|
|
2499
|
+
from coord import merge_queue as _mq # noqa: PLC0415
|
|
2500
|
+
|
|
2501
|
+
fresh = _mq.load_queue()
|
|
2502
|
+
by_id = {e.assignment_id: e for e in touched}
|
|
2503
|
+
merged = [by_id.get(item.assignment_id, item) for item in fresh]
|
|
2504
|
+
_mq.save_queue(merged)
|
|
2505
|
+
except Exception: # noqa: BLE001 — best-effort persistence; next tick recomputes
|
|
2506
|
+
pass
|
|
2507
|
+
|
|
2508
|
+
|
|
2353
2509
|
def _run_resume_probe(entry: QueueEntry) -> ProbeResult:
|
|
2354
2510
|
"""Run one entry's ``--resume-when`` probe with a hard timeout.
|
|
2355
2511
|
|
|
@@ -2730,6 +2886,15 @@ def drive_queue_tick(
|
|
|
2730
2886
|
if not reconcile_only:
|
|
2731
2887
|
_run_merge_only_candidates(plan, config_path)
|
|
2732
2888
|
|
|
2889
|
+
# #2535: independent of the drive-queue plan above (this scans the
|
|
2890
|
+
# MERGE queue directly, not drive-queue rows) — a bounded, best-effort
|
|
2891
|
+
# CI re-run for any entry blocked solely on stale-but-green checks
|
|
2892
|
+
# with an already-approved review. Same `not reconcile_only` posture
|
|
2893
|
+
# as the merge-only fast path just above: a `gh run rerun` is a real
|
|
2894
|
+
# external action that mode promises not to take.
|
|
2895
|
+
if not reconcile_only:
|
|
2896
|
+
_run_auto_revalidate_checks_stale(config_path)
|
|
2897
|
+
|
|
2733
2898
|
# #2235 Phase 0: record every entry this tick moved INTO or OUT OF
|
|
2734
2899
|
# `blocked`/`parked`, with the reason the queue stated and — for a
|
|
2735
2900
|
# release — what the release itself reveals about the true cause.
|
|
@@ -11,6 +11,7 @@ from typing import TYPE_CHECKING
|
|
|
11
11
|
import httpx
|
|
12
12
|
|
|
13
13
|
if TYPE_CHECKING:
|
|
14
|
+
from coord.merge_queue import QueuedMerge
|
|
14
15
|
from coord.models import Assignment, Board
|
|
15
16
|
from coord.progress import SmokeVerdict
|
|
16
17
|
|
|
@@ -991,6 +992,14 @@ class StalledDispatchAction:
|
|
|
991
992
|
(#602).
|
|
992
993
|
- ``"skipped_human_required"`` — the conflict-fix retry cap was already
|
|
993
994
|
hit; surfacing to a human, not auto-retrying.
|
|
995
|
+
- ``"skipped_sealed_conflict"`` (#2537) — ``merge_conflict_unresolved``
|
|
996
|
+
on a :data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row whose conflict
|
|
997
|
+
was confirmed (:func:`_conflict_confined_to_sealed_paths`) to be
|
|
998
|
+
confined to the repo's sealed acceptance-oracle paths — a
|
|
999
|
+
conflict-fix worker is guaranteed to self-restrict and push nothing
|
|
1000
|
+
there, so the dispatch was skipped rather than spending a worker
|
|
1001
|
+
session on a known no-op; needs a sealed-path-aware rebase dispatcher
|
|
1002
|
+
(a follow-up issue, not yet implemented).
|
|
994
1003
|
- ``"disabled"`` — ``pipeline.auto_dispatch_stalled`` is
|
|
995
1004
|
off; detection/narration still happened, dispatch did not.
|
|
996
1005
|
"""
|
|
@@ -1044,6 +1053,50 @@ def _stalled_row_has_live_session(board: "Board", work: "Assignment") -> bool:
|
|
|
1044
1053
|
return False
|
|
1045
1054
|
|
|
1046
1055
|
|
|
1056
|
+
def _conflict_confined_to_sealed_paths(
|
|
1057
|
+
entry: "QueuedMerge", config: Config,
|
|
1058
|
+
) -> list[str] | None:
|
|
1059
|
+
"""#2537: best-effort check for whether *entry*'s merge conflict can
|
|
1060
|
+
ONLY be within the repo's sealed acceptance-oracle paths
|
|
1061
|
+
(:meth:`coord.config.AcceptanceConfig.sealed_paths`).
|
|
1062
|
+
|
|
1063
|
+
Returns the entry branch's changed-file list when every file it touches
|
|
1064
|
+
(the three-dot compare of *entry.target_branch*...*entry.branch*, via
|
|
1065
|
+
:func:`coord.github_ops.get_compare_files` — the SAME GitHub-API-only,
|
|
1066
|
+
no-local-checkout seam #1720's dispatch-time overlap fence already uses)
|
|
1067
|
+
falls under a sealed path. GitHub's conflicting-file set is necessarily
|
|
1068
|
+
a SUBSET of this branch's own changed files — a file can only conflict
|
|
1069
|
+
if *this* branch touches it too — so confining the WHOLE branch diff to
|
|
1070
|
+
sealed paths is sufficient to guarantee the conflict is, without needing
|
|
1071
|
+
a local checkout or a `git merge-tree` call.
|
|
1072
|
+
|
|
1073
|
+
Returns ``None`` — "can't confirm confinement, don't skip the ordinary
|
|
1074
|
+
dispatch" — when: the repo has no acceptance driver configured (nothing
|
|
1075
|
+
is sealed); the compare API call fails or reports no files; or anything
|
|
1076
|
+
is touched outside every sealed path. This is a pure availability
|
|
1077
|
+
signal, never a hard "not confined" claim — a caller that gets ``None``
|
|
1078
|
+
falls back to :func:`coord.conflict_fix.dispatch_conflict_fix` exactly
|
|
1079
|
+
as before, which is always safe: a genuinely sealed-confined conflict
|
|
1080
|
+
just makes that dispatch a no-op (the conflict-fix worker self-restricts
|
|
1081
|
+
per CLAUDE.md's own sealed-path rule), so the only cost of a missed
|
|
1082
|
+
detection here is one wasted worker session, never an incorrect action.
|
|
1083
|
+
"""
|
|
1084
|
+
sealed = config.acceptance.sealed_paths(entry.repo_name)
|
|
1085
|
+
if not sealed:
|
|
1086
|
+
return None
|
|
1087
|
+
from coord import github_ops # noqa: PLC0415
|
|
1088
|
+
from coord.review import _path_is_sealed # noqa: PLC0415
|
|
1089
|
+
|
|
1090
|
+
files = github_ops.get_compare_files(
|
|
1091
|
+
entry.repo_github, entry.target_branch, entry.branch,
|
|
1092
|
+
)
|
|
1093
|
+
if not files:
|
|
1094
|
+
return None
|
|
1095
|
+
if all(any(_path_is_sealed(f, s) for s in sealed) for f in files):
|
|
1096
|
+
return files
|
|
1097
|
+
return None
|
|
1098
|
+
|
|
1099
|
+
|
|
1047
1100
|
def dispatch_stalled_pipeline_action(
|
|
1048
1101
|
detection: StalledDetection,
|
|
1049
1102
|
work: "Assignment",
|
|
@@ -1058,11 +1111,12 @@ def dispatch_stalled_pipeline_action(
|
|
|
1058
1111
|
Gated by ``config.pipeline.auto_dispatch_stalled`` (default ``False`` —
|
|
1059
1112
|
detection/narration via :func:`post_stalled_pipeline` is unconditional;
|
|
1060
1113
|
this is the opt-in action half) — EXCEPT for a ``review_request_changes_
|
|
1061
|
-
no_fix`` stall on a
|
|
1062
|
-
(``test-author
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1114
|
+
no_fix`` OR (#2537) ``merge_conflict_unresolved`` stall on a
|
|
1115
|
+
:data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row (``test-author``/
|
|
1116
|
+
``mock-author``), which dispatches regardless of the flag: no loop owns
|
|
1117
|
+
that row (#2302), so the flag would only leave it stalled forever with
|
|
1118
|
+
no alternative dispatcher to race. ``work`` rows under the same reasons
|
|
1119
|
+
keep the opt-in gate — ``coord drive`` owns those.
|
|
1066
1120
|
Mutates *board* in place exactly like
|
|
1067
1121
|
the auto-loop / review-dispatch helpers it delegates to — the caller is
|
|
1068
1122
|
responsible for persisting it.
|
|
@@ -1091,7 +1145,15 @@ def dispatch_stalled_pipeline_action(
|
|
|
1091
1145
|
the same bulk gate-checked enqueue the daemon passive tick already
|
|
1092
1146
|
runs on every interval.
|
|
1093
1147
|
- ``merge_conflict_unresolved`` → :func:`coord.conflict_fix.dispatch_conflict_fix`,
|
|
1094
|
-
the #1474 ``_dispatch_conflict_fixes`` path
|
|
1148
|
+
the #1474 ``_dispatch_conflict_fixes`` path — UNLESS (#2537) *work* is a
|
|
1149
|
+
:data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row AND the conflict can
|
|
1150
|
+
be confirmed (via :func:`_conflict_confined_to_sealed_paths`, a
|
|
1151
|
+
compare-API-only check) to be confined to the repo's sealed
|
|
1152
|
+
acceptance-oracle paths — a conflict-fix worker is REQUIRED by
|
|
1153
|
+
CLAUDE.md's own sealed-path rule to self-restrict from editing those,
|
|
1154
|
+
so it is guaranteed to push nothing; that case returns
|
|
1155
|
+
``"skipped_sealed_conflict"`` instead of spending a worker session on
|
|
1156
|
+
a known no-op.
|
|
1095
1157
|
- ``review_failed_no_verdict`` (#1584) → :func:`coord.review.dispatch_review`
|
|
1096
1158
|
again, the SAME call as ``done_no_review`` — the failed review left no
|
|
1097
1159
|
verdict behind, so recovery is identical to "no review was ever
|
|
@@ -1116,10 +1178,20 @@ def dispatch_stalled_pipeline_action(
|
|
|
1116
1178
|
# no drive run over it at all (see #2289). So this one reason+type
|
|
1117
1179
|
# combination bypasses the flag — every other reason, and `work` rows
|
|
1118
1180
|
# under this same reason, keep the opt-in gate unchanged.
|
|
1181
|
+
#
|
|
1182
|
+
# #2537: a `merge_conflict_unresolved` stall on the SAME row types is the
|
|
1183
|
+
# identical shape — `coord drive` has no conflict-fix arm for
|
|
1184
|
+
# test-author/mock-author rows either (it `_die()`s on them before ever
|
|
1185
|
+
# reaching a merge), and the passive tick only re-enqueues, never
|
|
1186
|
+
# dispatches a conflict-fix. Without this, the row bounces
|
|
1187
|
+
# PENDING → CONFLICT → parked forever with nobody attempting a fix
|
|
1188
|
+
# (observed live: coord-portal#132). So this reason joins the bypass for
|
|
1189
|
+
# these row types too — every other reason, and `work` rows under either
|
|
1190
|
+
# reason, keep the opt-in gate unchanged.
|
|
1119
1191
|
from coord.models import SEALED_PATH_AUTHOR_TYPES # noqa: PLC0415
|
|
1120
1192
|
|
|
1121
1193
|
sealed_author_stall = (
|
|
1122
|
-
detection.reason
|
|
1194
|
+
detection.reason in ("review_request_changes_no_fix", "merge_conflict_unresolved")
|
|
1123
1195
|
and work.type in SEALED_PATH_AUTHOR_TYPES
|
|
1124
1196
|
)
|
|
1125
1197
|
if not config.pipeline.auto_dispatch_stalled and not sealed_author_stall:
|
|
@@ -1423,6 +1495,35 @@ def dispatch_stalled_pipeline_action(
|
|
|
1423
1495
|
kind="skipped_human_required",
|
|
1424
1496
|
detail="conflict-fix already active or its retry cap was already hit",
|
|
1425
1497
|
)
|
|
1498
|
+
# #2537: dispatch_conflict_fix is guaranteed to no-op on a conflict
|
|
1499
|
+
# confined to the repo's sealed acceptance-oracle paths — the
|
|
1500
|
+
# conflict-fix worker is REQUIRED by CLAUDE.md's own sealed-path
|
|
1501
|
+
# rule to self-restrict from editing them (the additive carve-out
|
|
1502
|
+
# applies only to test-author/mock-author dispatches, never
|
|
1503
|
+
# conflict-fix), so it pushes nothing and the entry just re-stalls
|
|
1504
|
+
# next tick. Confirmed live on coord-portal#132/#135: a manually
|
|
1505
|
+
# forced dispatch_conflict_fix restored its worktree clean and
|
|
1506
|
+
# pushed nothing. Skip the known-wasted dispatch when we can
|
|
1507
|
+
# confirm confinement in advance; resolving it for real needs a
|
|
1508
|
+
# sealed-path-aware re-dispatch (tracked as a follow-up issue, not
|
|
1509
|
+
# yet implemented) — dispatch_conflict_fix stays the fallback for
|
|
1510
|
+
# every other case (can't confirm confinement, or genuinely not
|
|
1511
|
+
# confined).
|
|
1512
|
+
if work.type in SEALED_PATH_AUTHOR_TYPES:
|
|
1513
|
+
sealed_files = _conflict_confined_to_sealed_paths(entry, config)
|
|
1514
|
+
if sealed_files is not None:
|
|
1515
|
+
return StalledDispatchAction(
|
|
1516
|
+
kind="skipped_sealed_conflict",
|
|
1517
|
+
detail=(
|
|
1518
|
+
"conflict is confined to sealed acceptance paths ("
|
|
1519
|
+
+ ", ".join(sealed_files)
|
|
1520
|
+
+ ") — a conflict-fix worker is required to "
|
|
1521
|
+
"self-restrict from editing them (CLAUDE.md's "
|
|
1522
|
+
"sealed-path rule) and would push nothing; needs a "
|
|
1523
|
+
"sealed-path-aware rebase dispatcher (follow-up "
|
|
1524
|
+
"issue), not dispatch_conflict_fix"
|
|
1525
|
+
),
|
|
1526
|
+
)
|
|
1426
1527
|
fix = dispatch_conflict_fix(entry, board, config, prefer_machine=work.machine_name)
|
|
1427
1528
|
if fix is None:
|
|
1428
1529
|
return StalledDispatchAction(
|
|
@@ -393,8 +393,16 @@ Phase 0 steps 1–2 and Phase 1 step 6 above are also reachable by right-clickin
|
|
|
393
393
|
not a live session). The CLI's own claim-detection refuses a duplicate dispatch while one is
|
|
394
394
|
already in flight. This *is* Phase 0 step 1.
|
|
395
395
|
- **"View Gate A mock (PR)"** 👁 → opens that worker's PR in the browser so a human can read
|
|
396
|
-
`contract.md`
|
|
397
|
-
|
|
396
|
+
`contract.md` and review/merge the branch. Disabled until a PR exists. **This does not show the
|
|
397
|
+
rendered mock(s)** (#2501) — GitHub's "Files changed" view renders `.html` as a source diff,
|
|
398
|
+
never a live page; use "View Gate A mock (local)" below for that. **Merging that PR does not
|
|
399
|
+
satisfy Gate A** (#2063) — it is only how you review/merge what you are signing off on.
|
|
400
|
+
- **"View Gate A mock (local)"** 👁 → the actual mock viewer (#2501). Fast-forward-pulls the local
|
|
401
|
+
checkout's default branch (never forcing, never touching a dirty or diverged tree — aborts with
|
|
402
|
+
a toast instead, same as everywhere else this repo touches git destructively) and then opens
|
|
403
|
+
`tests/acceptance/ms-NN/mocks/` from disk in the OS's default browser, where `.html` actually
|
|
404
|
+
renders. Disabled until that mocks directory exists locally. Opens `mocks/index.html` once #2512
|
|
405
|
+
ships it; falls back to opening the mocks directory itself until then.
|
|
398
406
|
- **"Approve Gate A"** ✓ → `coord gate-a --approved <repo> <tracking_issue>` — records the verdict
|
|
399
407
|
that actually satisfies Gate A. Sits directly beside the 👁 on purpose: reviewing and recording
|
|
400
408
|
are one gesture.
|
|
@@ -2166,6 +2166,149 @@ def test_a_parked_merge_only_race_falls_back_to_an_ordinary_relaunch(
|
|
|
2166
2166
|
assert len(merge_only_runs.merge) == 1, merge_only_runs.merge
|
|
2167
2167
|
|
|
2168
2168
|
|
|
2169
|
+
# ── #2535: auto-fire a CI re-run for a merge-queue entry blocked SOLELY on
|
|
2170
|
+
# stale-but-green checks with an already-approved review — no drive-queue row
|
|
2171
|
+
# needed at all, since this scans the merge queue directly. Fixtures below are
|
|
2172
|
+
# deliberately self-contained (not `live_ci_backend`, which fixes the base
|
|
2173
|
+
# timestamp to always read FRESH — the opposite of what a staleness scenario
|
|
2174
|
+
# needs, and whose fake CI stand-in has no `rerun_for_pr` to assert calls on).
|
|
2175
|
+
|
|
2176
|
+
|
|
2177
|
+
def _seed_pending_merge_row(
|
|
2178
|
+
coord_db, issue: int, *, pr_number: int, ci_stale_reruns: int = 0
|
|
2179
|
+
) -> None:
|
|
2180
|
+
"""A bare `merge_queue` row — no drive-queue counterpart — PENDING, with
|
|
2181
|
+
a PR number (required for `ci_revalidation_candidates` to consider it at
|
|
2182
|
+
all) and an optional pre-spent `ci_stale_reruns` budget."""
|
|
2183
|
+
coord_db.execute(
|
|
2184
|
+
"INSERT INTO merge_queue "
|
|
2185
|
+
"(assignment_id, repo_name, repo_github, branch, target_branch, "
|
|
2186
|
+
" issue_number, issue_title, state, pr_number, enqueued_at, "
|
|
2187
|
+
" ci_stale_reruns) "
|
|
2188
|
+
"VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?)",
|
|
2189
|
+
(
|
|
2190
|
+
f"w{issue}", REPO, "john/claude-coordinator", f"work-{issue}", "main",
|
|
2191
|
+
issue, f"issue {issue}", pr_number, time.time(), ci_stale_reruns,
|
|
2192
|
+
),
|
|
2193
|
+
)
|
|
2194
|
+
coord_db.commit()
|
|
2195
|
+
|
|
2196
|
+
|
|
2197
|
+
class _FakeStaleCi:
|
|
2198
|
+
"""Stands in for the live backend, like `live_ci_backend`'s `_FakeLiveCi`
|
|
2199
|
+
— but with a `rerun_for_pr` that records its calls (#2182's fake has
|
|
2200
|
+
none, since nothing before #2535 ever needed the tick to trigger one)."""
|
|
2201
|
+
|
|
2202
|
+
is_available = True
|
|
2203
|
+
|
|
2204
|
+
def __init__(self, rerun_calls: list) -> None:
|
|
2205
|
+
self._rerun_calls = rerun_calls
|
|
2206
|
+
|
|
2207
|
+
def list_checks_for_pr(self, repo: str, number: int) -> list:
|
|
2208
|
+
from coord.ci_store import CheckRun
|
|
2209
|
+
|
|
2210
|
+
return [CheckRun(
|
|
2211
|
+
name="build", status="completed", conclusion="success",
|
|
2212
|
+
url="", run_id="1", started_at=100.0, completed_at=160.0,
|
|
2213
|
+
)]
|
|
2214
|
+
|
|
2215
|
+
def expects_checks(self, repo: str, number: int) -> bool:
|
|
2216
|
+
return True
|
|
2217
|
+
|
|
2218
|
+
def rerun_for_pr(self, repo: str, number: int) -> bool:
|
|
2219
|
+
self._rerun_calls.append((repo, number))
|
|
2220
|
+
return True
|
|
2221
|
+
|
|
2222
|
+
|
|
2223
|
+
@pytest.fixture
|
|
2224
|
+
def stale_ci_backend(monkeypatch):
|
|
2225
|
+
"""Fakes the #1851 staleness shape directly: a green check that
|
|
2226
|
+
`started_at` well BEFORE the base's own commit timestamp — the base
|
|
2227
|
+
moved out from under an already-green PR. Returns the list of
|
|
2228
|
+
`(repo, pr_number)` pairs `rerun_for_pr` was called with.
|
|
2229
|
+
"""
|
|
2230
|
+
import coord.ci_store as ci_store_module
|
|
2231
|
+
import coord.github_ops as github_ops
|
|
2232
|
+
|
|
2233
|
+
rerun_calls: list[tuple[str, int]] = []
|
|
2234
|
+
monkeypatch.setattr(
|
|
2235
|
+
ci_store_module, "build_ci_store", lambda t, **_kw: _FakeStaleCi(rerun_calls)
|
|
2236
|
+
)
|
|
2237
|
+
# The check above started at 100.0; the base's own commit landed at
|
|
2238
|
+
# 1000.0 — well AFTER, so `_ci_checks_are_stale` reads True.
|
|
2239
|
+
monkeypatch.setattr(
|
|
2240
|
+
github_ops, "get_branch_commit_timestamp", lambda repo, branch: 1000.0
|
|
2241
|
+
)
|
|
2242
|
+
monkeypatch.setattr(github_ops, "get_pr_commit_messages", lambda repo, n: [])
|
|
2243
|
+
monkeypatch.setattr(github_ops, "check_pr_mergeable", lambda repo, n: None)
|
|
2244
|
+
return rerun_calls
|
|
2245
|
+
|
|
2246
|
+
|
|
2247
|
+
def test_auto_revalidate_fires_a_ci_rerun_for_an_entry_blocked_solely_on_stale_checks(
|
|
2248
|
+
cli_no_gates, coord_db, stale_ci_backend,
|
|
2249
|
+
):
|
|
2250
|
+
"""The #2530/#2534 shape, unattended: a PENDING entry with a PR, review
|
|
2251
|
+
already satisfied (`cli_no_gates` disables the review requirement —
|
|
2252
|
+
the same minimal "sole blocker is CI" shape
|
|
2253
|
+
`TestCiRevalidationCandidates` uses in tests/test_merge_queue.py), and
|
|
2254
|
+
CI checks that are green but predate the current base. The tick fires
|
|
2255
|
+
the re-run itself — no drive-queue row, no operator running
|
|
2256
|
+
`coord merge --revalidate` by hand.
|
|
2257
|
+
"""
|
|
2258
|
+
_seed_pending_merge_row(coord_db, 2534, pr_number=42)
|
|
2259
|
+
|
|
2260
|
+
result = cli_no_gates("tick")
|
|
2261
|
+
assert result.exit_code == 0, result.output
|
|
2262
|
+
|
|
2263
|
+
assert stale_ci_backend == [("john/claude-coordinator", 42)]
|
|
2264
|
+
row = coord_db.execute(
|
|
2265
|
+
"SELECT ci_stale_reruns, error FROM merge_queue WHERE issue_number = ?",
|
|
2266
|
+
(2534,),
|
|
2267
|
+
).fetchone()
|
|
2268
|
+
assert row["ci_stale_reruns"] == 1
|
|
2269
|
+
assert row["error"].startswith("CI running:")
|
|
2270
|
+
assert "#2535" in row["error"]
|
|
2271
|
+
|
|
2272
|
+
from coord.audit import query_audit_log
|
|
2273
|
+
|
|
2274
|
+
entries = query_audit_log(event_type="merge_checks_stale_auto_revalidate")["entries"]
|
|
2275
|
+
assert len(entries) == 1
|
|
2276
|
+
assert entries[0]["issue"] == 2534
|
|
2277
|
+
assert entries[0]["repo"] == REPO
|
|
2278
|
+
|
|
2279
|
+
|
|
2280
|
+
def test_auto_revalidate_never_exceeds_the_shared_budget(
|
|
2281
|
+
cli_no_gates, coord_db, stale_ci_backend,
|
|
2282
|
+
):
|
|
2283
|
+
"""Budget already spent (whether by a prior tick or a prior live
|
|
2284
|
+
`coord merge` attempt makes no difference — it's the same counter): no
|
|
2285
|
+
NEW rerun fires, but the exhaustion is still recorded so a human
|
|
2286
|
+
watching the audit trail sees it."""
|
|
2287
|
+
from coord.merge_queue import MAX_CI_STALE_RERUNS
|
|
2288
|
+
|
|
2289
|
+
_seed_pending_merge_row(
|
|
2290
|
+
coord_db, 2534, pr_number=42, ci_stale_reruns=MAX_CI_STALE_RERUNS
|
|
2291
|
+
)
|
|
2292
|
+
|
|
2293
|
+
result = cli_no_gates("tick")
|
|
2294
|
+
assert result.exit_code == 0, result.output
|
|
2295
|
+
|
|
2296
|
+
assert stale_ci_backend == [] # no new rerun triggered
|
|
2297
|
+
row = coord_db.execute(
|
|
2298
|
+
"SELECT ci_stale_reruns FROM merge_queue WHERE issue_number = ?",
|
|
2299
|
+
(2534,),
|
|
2300
|
+
).fetchone()
|
|
2301
|
+
assert row["ci_stale_reruns"] == MAX_CI_STALE_RERUNS # unchanged
|
|
2302
|
+
|
|
2303
|
+
from coord.audit import query_audit_log
|
|
2304
|
+
|
|
2305
|
+
entries = query_audit_log(
|
|
2306
|
+
event_type="merge_checks_stale_auto_revalidate_exhausted"
|
|
2307
|
+
)["entries"]
|
|
2308
|
+
assert len(entries) == 1
|
|
2309
|
+
assert entries[0]["issue"] == 2534
|
|
2310
|
+
|
|
2311
|
+
|
|
2169
2312
|
def test_a_repeatedly_dead_drive_still_reaches_blocked_and_escalates(
|
|
2170
2313
|
cli, seed, launches, coord_db
|
|
2171
2314
|
):
|