code-coordinator 0.5.221__tar.gz → 0.5.222__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.221 → code_coordinator-0.5.222}/PKG-INFO +1 -1
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/drive_queue.py +14 -7
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/drive_queue.py +83 -20
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/merge_queue.py +35 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_drive_queue.py +48 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_drive.py +37 -17
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_drive_queue.py +90 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/.gitignore +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/CLAUDE.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/GOAL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/LICENSE +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/MANIFEST.in +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/README.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/__init__.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agent.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/audit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/block_log.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/board_service.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/brain.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/claim.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/cli.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/client.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/comments.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/config.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dao.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/db.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/deps.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/drive.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/events.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/filelock.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/freshness.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/gates.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/goal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/context.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/models.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/render.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/health/units.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/hooks.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/interactive.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/models.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/network.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/notify.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/openapi.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/parentage.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/plans.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/progress.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/release_window.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/reports.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/review.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/self_health.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/smoke.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/split_work.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/state.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/test_author.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/test_report.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/usage.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/install-agent.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/pyproject.toml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/setup.cfg +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/__init__.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/conftest.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_db.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_events.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_init.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_models.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_network.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_session.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_split.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_state.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.221 → code_coordinator-0.5.222}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -1916,14 +1916,21 @@ def _fetch_live_ci_gate(
|
|
|
1916
1916
|
gate ``coord merge --plan`` computes, taken live, right now, this tick
|
|
1917
1917
|
(#2182).
|
|
1918
1918
|
|
|
1919
|
-
The second dict (#2347) carries the reason text
|
|
1919
|
+
The second dict (#2347, extended by #2556) carries the reason text
|
|
1920
1920
|
:func:`coord.merge_queue.entry_gate_status` returned alongside each
|
|
1921
|
-
still-blocked verdict
|
|
1922
|
-
plan_tick`
|
|
1923
|
-
|
|
1924
|
-
(``
|
|
1925
|
-
|
|
1926
|
-
|
|
1921
|
+
still-blocked verdict, and is handed to :func:`coord.drive_queue.
|
|
1922
|
+
plan_tick` as its ``live_ci_gate_reason`` parameter, which now gives it
|
|
1923
|
+
a first, decisive job (#2556): when this text carries none of the
|
|
1924
|
+
self-refreshing prefixes (``is_ci_pending_reason``/``is_ci_infra_reason``/
|
|
1925
|
+
``is_ci_flaky_reason``/``is_ci_unreadable_reason``), ``plan_tick``
|
|
1926
|
+
overrides the first dict's still-blocked verdict into a resume — a
|
|
1927
|
+
completed, *failing* CI run must never be indistinguishable from a slow
|
|
1928
|
+
one. When it DOES carry one of those prefixes, this reason is used the
|
|
1929
|
+
pre-#2556 way: only to rewrite a still-``parked`` entry's
|
|
1930
|
+
``last_reason`` when the fresh reading is specifically "GitHub
|
|
1931
|
+
unreachable" (``is_ci_unreadable_reason``) and differs from what is
|
|
1932
|
+
currently stored. See ``plan_tick``'s own ``live_ci_gate_reason``
|
|
1933
|
+
docstring for the full account.
|
|
1927
1934
|
|
|
1928
1935
|
THE GAP THIS CLOSES. On the daemon host — the only machine that ever
|
|
1929
1936
|
runs this tick (``docs/AGENT_OPERATIONS.md``) — ``_fetch_board_view``
|
|
@@ -95,7 +95,7 @@ from coord.merge_queue import (
|
|
|
95
95
|
PLAN_READY,
|
|
96
96
|
is_ci_flaky_reason,
|
|
97
97
|
is_ci_infra_reason,
|
|
98
|
-
|
|
98
|
+
is_ci_terminal_reason,
|
|
99
99
|
is_ci_unreadable_reason,
|
|
100
100
|
is_stale_smoke_reason,
|
|
101
101
|
)
|
|
@@ -1121,12 +1121,7 @@ def build_board_view(
|
|
|
1121
1121
|
# board-build time. `plan_reason` already carries it whenever it
|
|
1122
1122
|
# applies; the live plan reading and a live `coord merge` attempt's
|
|
1123
1123
|
# raw reading can never disagree about this one.
|
|
1124
|
-
if
|
|
1125
|
-
is_ci_pending_reason(reason)
|
|
1126
|
-
or is_ci_infra_reason(reason)
|
|
1127
|
-
or is_ci_flaky_reason(reason)
|
|
1128
|
-
or is_ci_unreadable_reason(reason)
|
|
1129
|
-
):
|
|
1124
|
+
if is_ci_terminal_reason(reason):
|
|
1130
1125
|
continue
|
|
1131
1126
|
# #2158: the same plan row that came back with NO reason of its own
|
|
1132
1127
|
# also carries `ci_summary` — `summarize_counts` over the very checks
|
|
@@ -3180,18 +3175,33 @@ def plan_tick(
|
|
|
3180
3175
|
the #2158 ceiling included — see
|
|
3181
3176
|
:func:`coord.commands.drive_queue._fetch_live_ci_gate` for the shell
|
|
3182
3177
|
side, which computes this ONLY for the bounded set of entries currently
|
|
3183
|
-
`parked` on a CI reason, never the whole queue.
|
|
3184
|
-
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3178
|
+
`parked` on a CI reason, never the whole queue. `True` is NOT simply
|
|
3179
|
+
"stay parked" any more (#2556): it means the fresh read isn't
|
|
3180
|
+
``PLAN_READY``, which is true both while checks are still genuinely in
|
|
3181
|
+
flight (or mid one of their own bounded self-refreshing windows —
|
|
3182
|
+
:func:`~coord.merge_queue.is_ci_pending_reason`/`is_ci_infra_reason`/
|
|
3183
|
+
`is_ci_flaky_reason`/`is_ci_unreadable_reason`, stay parked) AND once
|
|
3184
|
+
they have reported a TERMINAL verdict against the code (a plain "CI
|
|
3185
|
+
failed: ..." reading with none of those prefixes — resume instead, so a
|
|
3186
|
+
completed, failing run can never be indistinguishable from a slow one).
|
|
3187
|
+
See *live_ci_gate_reason* just below, which is what makes that
|
|
3188
|
+
distinction possible.
|
|
3189
|
+
|
|
3190
|
+
*live_ci_gate_reason* (#2347, extended by #2556) is *live_ci_gate*'s
|
|
3191
|
+
companion: the reason text the SAME fresh `entry_gate_status` call
|
|
3192
|
+
returned, for entries whose reading is STILL not `PLAN_READY`. #2556
|
|
3193
|
+
gives it a first, decisive job: when this text carries none of the
|
|
3194
|
+
self-refreshing prefixes (`is_ci_pending_reason`/`is_ci_infra_reason`/
|
|
3195
|
+
`is_ci_flaky_reason`/`is_ci_unreadable_reason`), `live_ci_gate`'s `True`
|
|
3196
|
+
is overridden into a resume — see `plan_tick`'s body. When it DOES carry
|
|
3197
|
+
one of those prefixes, this reason is used the pre-#2556 way: only to
|
|
3198
|
+
rewrite a still-parked entry's `last_reason` when the fresh reading is
|
|
3199
|
+
`CI_UNREADABLE_PREFIX`-shaped and differs from what is currently stored,
|
|
3200
|
+
so `coord drive-queue list`/`status` shows "GitHub could not be reached"
|
|
3201
|
+
the moment that becomes the real cause, instead of silently keeping
|
|
3202
|
+
whatever reason the entry happened to park on originally (which
|
|
3203
|
+
#1891/#1892/#2252's "still shut ⇒ no reconcile, no write" rule would
|
|
3204
|
+
otherwise leave frozen indefinitely —
|
|
3195
3205
|
see the issue for the observed incident: a stale "CI running: ..."
|
|
3196
3206
|
reason surviving a run of transient GitHub API 503s for most of
|
|
3197
3207
|
`PARK_STALE_SECONDS` with no operator-visible signal of the real cause).
|
|
@@ -3524,6 +3534,60 @@ def plan_tick(
|
|
|
3524
3534
|
live_override = (live_ci_gate or {}).get(entry.key)
|
|
3525
3535
|
if live_override is not None:
|
|
3526
3536
|
if live_override:
|
|
3537
|
+
live_reason = (live_ci_gate_reason or {}).get(entry.key)
|
|
3538
|
+
# #2556: `live_override=True` only means the FRESH read
|
|
3539
|
+
# taken THIS tick isn't PLAN_READY — but "not ready" folds
|
|
3540
|
+
# together two very different facts. One is "checks are
|
|
3541
|
+
# genuinely still in flight" (`is_ci_pending_reason`), or one
|
|
3542
|
+
# of the other self-refreshing, no-verdict-yet classes
|
|
3543
|
+
# (`is_ci_infra_reason`'s verdictless failure mid its own
|
|
3544
|
+
# bounded auto-rerun, `is_ci_flaky_reason`'s one-shot re-run
|
|
3545
|
+
# to rule out a flake, `is_ci_unreadable_reason`'s bare
|
|
3546
|
+
# GitHub-unreachable read, handled specially just below) —
|
|
3547
|
+
# for all of these, "still shut ⇒ stay parked" (#1891/#2182)
|
|
3548
|
+
# is exactly right, because there is no fresh verdict to act
|
|
3549
|
+
# on yet. The other is "checks already reported a TERMINAL
|
|
3550
|
+
# verdict against the code" — a plain "CI failed: ..."
|
|
3551
|
+
# reading carrying none of those prefixes. This entry's own
|
|
3552
|
+
# park message promises "the queue resumes it automatically
|
|
3553
|
+
# once they do [report]" — a completed, failing run
|
|
3554
|
+
# satisfies that in every ordinary reading, so staying
|
|
3555
|
+
# parked on it forever (as every prior tick did — the #2158
|
|
3556
|
+
# staleness ceiling never even runs, because it only applies
|
|
3557
|
+
# when `live_override` is absent) is the bug: a red CI on a
|
|
3558
|
+
# parked row was indistinguishable from a slow CI on one,
|
|
3559
|
+
# unboundedly. Resume here exactly like the "reads READY"
|
|
3560
|
+
# branch below (no attempt spent — a fresh GitHub read is
|
|
3561
|
+
# not a failed launch attempt) so this falls straight into
|
|
3562
|
+
# the SAME `waiting` walk, on the SAME tick; whatever
|
|
3563
|
+
# relaunches `coord drive` finds the terminal CI reading and
|
|
3564
|
+
# routes it through `_decide_merge`'s existing checks_failed
|
|
3565
|
+
# handling (dispatch a fix, or block with a real reason) —
|
|
3566
|
+
# exactly the path any other red-CI entry already takes.
|
|
3567
|
+
if live_reason and is_ci_terminal_reason(live_reason):
|
|
3568
|
+
reason = (
|
|
3569
|
+
f"live re-check of {entry.key}'s gate this tick "
|
|
3570
|
+
f"reads a terminal, non-pending result ({live_reason}) "
|
|
3571
|
+
"— resuming from parked without spending an attempt "
|
|
3572
|
+
"so the normal checks_failed handling can take over "
|
|
3573
|
+
"(#2556)"
|
|
3574
|
+
)
|
|
3575
|
+
reconciles.append(
|
|
3576
|
+
Reconcile(
|
|
3577
|
+
entry.key,
|
|
3578
|
+
"resumed",
|
|
3579
|
+
reason,
|
|
3580
|
+
occupies=False,
|
|
3581
|
+
updates={
|
|
3582
|
+
"state": STATE_WAITING,
|
|
3583
|
+
"attempts": 0,
|
|
3584
|
+
"last_reason": reason,
|
|
3585
|
+
},
|
|
3586
|
+
)
|
|
3587
|
+
)
|
|
3588
|
+
states[entry.key] = STATE_WAITING
|
|
3589
|
+
effective_attempts[entry.key] = 0
|
|
3590
|
+
continue
|
|
3527
3591
|
# #2347: CONFIRMED still blocked — but if the FRESH reading
|
|
3528
3592
|
# taken THIS tick says the real cause is "GitHub could not
|
|
3529
3593
|
# be reached" (not a real CI verdict) and that differs from
|
|
@@ -3535,7 +3599,6 @@ def plan_tick(
|
|
|
3535
3599
|
# rule does for every other still-blocked reading. State
|
|
3536
3600
|
# stays `parked`, no attempt spent — this changes only what
|
|
3537
3601
|
# the operator is told, never the decision.
|
|
3538
|
-
live_reason = (live_ci_gate_reason or {}).get(entry.key)
|
|
3539
3602
|
if (
|
|
3540
3603
|
live_reason
|
|
3541
3604
|
and is_ci_unreadable_reason(live_reason)
|
|
@@ -1525,6 +1525,41 @@ def is_ci_flaky_reason(reason: str | None) -> bool:
|
|
|
1525
1525
|
return (reason or "").startswith(CI_FLAKY_PREFIX)
|
|
1526
1526
|
|
|
1527
1527
|
|
|
1528
|
+
def is_ci_terminal_reason(reason: str | None) -> bool:
|
|
1529
|
+
"""True when *reason* is a CONCLUDED CI verdict — a plain "checks
|
|
1530
|
+
failed: ..." (or similarly final) reading carrying none of the four
|
|
1531
|
+
self-refreshing, no-verdict-yet prefixes above (#2556).
|
|
1532
|
+
|
|
1533
|
+
``not is_ci_terminal_reason(r)`` is exactly "this reading is still
|
|
1534
|
+
genuinely in flight, or mid one of its own bounded self-refreshing
|
|
1535
|
+
windows, and answers nothing yet about whether the code is any good" —
|
|
1536
|
+
:func:`is_ci_pending_reason` (checks exist and are still running),
|
|
1537
|
+
:func:`is_ci_infra_reason` (a check completed but said nothing about the
|
|
1538
|
+
code, mid its own auto-rerun), :func:`is_ci_flaky_reason` (a real
|
|
1539
|
+
verdict, but only observed once, mid its one-shot re-run to rule out a
|
|
1540
|
+
flake), or :func:`is_ci_unreadable_reason` (GitHub could not even be
|
|
1541
|
+
asked the question). Anything else — most commonly a plain "checks
|
|
1542
|
+
failed: ..." with none of those prefixes — is terminal: a concluded
|
|
1543
|
+
result the queue can act on now, never indistinguishable from a slow or
|
|
1544
|
+
still-resolving one.
|
|
1545
|
+
|
|
1546
|
+
The single implementation of this classification. Two call sites used to
|
|
1547
|
+
each spell out the identical four-way disjunction inline — a `parked`
|
|
1548
|
+
entry's "is this still self-refreshing?" gate in this module's own
|
|
1549
|
+
`process()`, and `coord.drive_queue.plan_tick`'s #2556 resume-on-
|
|
1550
|
+
terminal-failure branch — which is exactly the "two independent
|
|
1551
|
+
implementations that agree today are a split-brain waiting to happen"
|
|
1552
|
+
shape this repo's own review checklist warns against. Call this instead
|
|
1553
|
+
of re-deriving the disjunction at a new call site.
|
|
1554
|
+
"""
|
|
1555
|
+
return not (
|
|
1556
|
+
is_ci_pending_reason(reason)
|
|
1557
|
+
or is_ci_infra_reason(reason)
|
|
1558
|
+
or is_ci_flaky_reason(reason)
|
|
1559
|
+
or is_ci_unreadable_reason(reason)
|
|
1560
|
+
)
|
|
1561
|
+
|
|
1562
|
+
|
|
1528
1563
|
# #1892: auto-reruns `process()` will trigger for a single entry's verdictless
|
|
1529
1564
|
# CI failure (via `CiStore.rerun_for_pr`) before giving up and parking it for
|
|
1530
1565
|
# a human instead of the queue's own #1891 machinery. A workflow genuinely
|
|
@@ -1835,6 +1835,15 @@ def _green_check(name: str = "test (3.12)"):
|
|
|
1835
1835
|
)
|
|
1836
1836
|
|
|
1837
1837
|
|
|
1838
|
+
def _failed_check(name: str = "test (3.12)"):
|
|
1839
|
+
from coord.ci_store import CheckRun
|
|
1840
|
+
|
|
1841
|
+
return CheckRun(
|
|
1842
|
+
name=name, status="completed", conclusion="failure",
|
|
1843
|
+
url="", run_id="1", started_at=100.0, completed_at=160.0,
|
|
1844
|
+
)
|
|
1845
|
+
|
|
1846
|
+
|
|
1838
1847
|
def _running_check(name: str = "test (3.12)"):
|
|
1839
1848
|
from coord.ci_store import CheckRun
|
|
1840
1849
|
|
|
@@ -1914,6 +1923,45 @@ def test_a_parked_entry_with_ci_still_genuinely_running_stays_parked(
|
|
|
1914
1923
|
assert "1 parked" in cli_no_gates("status").output
|
|
1915
1924
|
|
|
1916
1925
|
|
|
1926
|
+
def test_a_parked_entry_resumes_once_ci_reports_a_confirmed_failure(
|
|
1927
|
+
cli_no_gates, seed, launches, coord_db, live_ci_backend,
|
|
1928
|
+
):
|
|
1929
|
+
"""#2556, reproduced rather than injected.
|
|
1930
|
+
|
|
1931
|
+
coord-portal#131 (live, 2026-08-22): a row parked on "CI running: e2e
|
|
1932
|
+
smoke (playwright)" never noticed the check it was watching completed as
|
|
1933
|
+
FAILURE — it stayed `parked`, with `last_reason` still reading "CI
|
|
1934
|
+
running: ..." over an hour after the run finished. The #2182 live
|
|
1935
|
+
re-check correctly asks GitHub again every tick, but collapsed "still
|
|
1936
|
+
running" and "confirmed failed" into the same "stay parked" branch,
|
|
1937
|
+
because both merely fail to read `PLAN_READY`. A completed run — even a
|
|
1938
|
+
red one — satisfies this entry's own park promise ("the queue resumes it
|
|
1939
|
+
automatically once they do [report]"); it must resume and let the normal
|
|
1940
|
+
`waiting`/launch path route the failure through `coord drive`'s existing
|
|
1941
|
+
checks_failed handling, exactly like any other red-CI entry.
|
|
1942
|
+
"""
|
|
1943
|
+
_park_with_pr(cli_no_gates, seed, coord_db)
|
|
1944
|
+
assert "CI running" in (queued(2159)["last_reason"] or "")
|
|
1945
|
+
|
|
1946
|
+
live_ci_backend([_failed_check()])
|
|
1947
|
+
|
|
1948
|
+
result = cli_no_gates("tick")
|
|
1949
|
+
assert result.exit_code == 0, result.output
|
|
1950
|
+
# The resume itself is visible in this tick's own reconcile line — the
|
|
1951
|
+
# entry then launches in the SAME tick (like the #2182 green-check case
|
|
1952
|
+
# above), which clears `last_reason` to "" on success, so the CI-failed
|
|
1953
|
+
# reading is only observable in the tick's rendered output, not the
|
|
1954
|
+
# post-launch row.
|
|
1955
|
+
assert "resumed" in result.output
|
|
1956
|
+
assert "CI failed" in result.output
|
|
1957
|
+
entry = queued(2159)
|
|
1958
|
+
assert entry["state"] != "parked", entry # no longer wedged
|
|
1959
|
+
assert entry["attempts"] == 0 # #1891/#2273: still free — no attempt spent
|
|
1960
|
+
assert len(launches) == 2, launches # resumed straight into a fresh launch
|
|
1961
|
+
|
|
1962
|
+
assert "parked" not in cli_no_gates("status").output
|
|
1963
|
+
|
|
1964
|
+
|
|
1917
1965
|
def test_a_parked_entrys_reason_is_corrected_when_github_is_unreachable(
|
|
1918
1966
|
cli_no_gates, seed, launches, coord_db, live_ci_backend,
|
|
1919
1967
|
):
|
|
@@ -4662,24 +4662,33 @@ def driver_factory(tmp_path, monkeypatch, capsys):
|
|
|
4662
4662
|
monkeypatch.setenv("TMPDIR", str(tmp_path))
|
|
4663
4663
|
monkeypatch.setattr("coord.drive_state.scratch_dir", lambda: tmp_path)
|
|
4664
4664
|
monkeypatch.setattr("coord.drive.scratch_dir", lambda: tmp_path)
|
|
4665
|
-
#
|
|
4666
|
-
#
|
|
4667
|
-
#
|
|
4668
|
-
#
|
|
4665
|
+
# #2170-class isolation, fixture-wide: `run_notify()` takes a REAL flock
|
|
4666
|
+
# on `notify_lock_path()` (`Path.home()/".coord"/"notify.lock"`, resolved
|
|
4667
|
+
# at call time) whenever `DriveOptions(notify=True)` is in play. Any
|
|
4668
|
+
# driver test in this module can turn that on, and without isolating it
|
|
4669
|
+
# the lock contends with whatever else on the host legitimately holds it
|
|
4670
|
+
# — on a machine that actually runs the fleet, `coord-notify.timer`
|
|
4671
|
+
# (5-minute cadence) and the board daemon's own drain both hold it for
|
|
4672
|
+
# the length of a full notify pass. The test then burns up to the full
|
|
4673
|
+
# 5-minute `timeout=300` per acquire, logs "could not take
|
|
4674
|
+
# ~/.coord/notify.lock within 5m — skipping nudge", and fails with an
|
|
4675
|
+
# empty call list. That is a race with whatever else is running on the
|
|
4676
|
+
# machine, not a signal about the code under test — exactly the class
|
|
4677
|
+
# `tests/test_ambient_home_isolation.py` and the `populated-home` CI job
|
|
4678
|
+
# exist to keep out.
|
|
4669
4679
|
#
|
|
4670
|
-
#
|
|
4671
|
-
#
|
|
4672
|
-
#
|
|
4673
|
-
#
|
|
4674
|
-
#
|
|
4675
|
-
#
|
|
4676
|
-
#
|
|
4677
|
-
#
|
|
4678
|
-
#
|
|
4679
|
-
#
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
)
|
|
4680
|
+
# Redirecting $HOME is the whole mechanism, and it subsumes the earlier
|
|
4681
|
+
# #2536 fix (which pinned `coord.drive.notify_lock_path` at
|
|
4682
|
+
# `tmp_path/"notify.lock"` instead): `notify_lock_path()` resolves
|
|
4683
|
+
# `Path.home()` at call time, so the lock lands at
|
|
4684
|
+
# `tmp_path/".coord"/"notify.lock"` either way — but $HOME also covers
|
|
4685
|
+
# everything *else* in the driver that reaches for `~/.coord`, and it
|
|
4686
|
+
# needs no upkeep as call sites move. Deliberately NOT belt-and-braces:
|
|
4687
|
+
# re-pinning `notify_lock_path` on top of this would move the lock back
|
|
4688
|
+
# out of the redirected $HOME and silently defeat
|
|
4689
|
+
# `test_notify_nudges_coord_notify_under_the_shared_lock`, whose whole
|
|
4690
|
+
# job is to assert the redirection took.
|
|
4691
|
+
monkeypatch.setenv("HOME", str(tmp_path))
|
|
4683
4692
|
|
|
4684
4693
|
def make(
|
|
4685
4694
|
payloads, *, opts=None, verifier=None, config=None, oracle_gate=None,
|
|
@@ -5725,6 +5734,15 @@ def test_notify_is_off_by_default(driver_factory, monkeypatch):
|
|
|
5725
5734
|
|
|
5726
5735
|
|
|
5727
5736
|
def test_notify_nudges_coord_notify_under_the_shared_lock(driver_factory, tmp_path):
|
|
5737
|
+
# #2170-class isolation: `run_notify()` takes a REAL flock on
|
|
5738
|
+
# `notify_lock_path()` — i.e. `Path.home()/".coord"/"notify.lock"`,
|
|
5739
|
+
# resolved at call time. `driver_factory` redirects $HOME to `tmp_path`
|
|
5740
|
+
# fixture-wide (see its definition) precisely so this doesn't contend
|
|
5741
|
+
# with whatever else on the host legitimately holds that lock (a live
|
|
5742
|
+
# `coord notify` / `run_drain` on a daemon host, or simply another
|
|
5743
|
+
# pytest worker running the sibling drain tests) and burn the full
|
|
5744
|
+
# 5-minute `timeout=300` before failing with an empty `seen`. This
|
|
5745
|
+
# assertion just confirms the redirection actually took.
|
|
5728
5746
|
driver = driver_factory(
|
|
5729
5747
|
[board(status="merged")], opts=DriveOptions(machine="precision", notify=True)
|
|
5730
5748
|
)
|
|
@@ -5732,6 +5750,8 @@ def test_notify_nudges_coord_notify_under_the_shared_lock(driver_factory, tmp_pa
|
|
|
5732
5750
|
driver.run_coord = lambda args, **kw: seen.append(args) or 0 # type: ignore[assignment]
|
|
5733
5751
|
driver.run_notify()
|
|
5734
5752
|
assert seen == [("notify",)]
|
|
5753
|
+
# The lock really was taken under the redirected $HOME, not the host's.
|
|
5754
|
+
assert (tmp_path / ".coord" / "notify.lock").exists()
|
|
5735
5755
|
|
|
5736
5756
|
|
|
5737
5757
|
def test_stalled_stage_gets_re_nudged_on_every_stall_window(driver_factory, capsys):
|
|
@@ -2323,6 +2323,96 @@ def test_plan_tick_does_not_rewrite_a_still_pending_reason_as_unreadable():
|
|
|
2323
2323
|
assert not any(r.key == entry_key(REPO, 2347) for r in plan.reconciles)
|
|
2324
2324
|
|
|
2325
2325
|
|
|
2326
|
+
# ── #2556: a terminal (not just pending) live CI reading must resume a
|
|
2327
|
+
# `parked` entry, and must do so even at capacity ──────────────────────────
|
|
2328
|
+
#
|
|
2329
|
+
# The gap #2347 left behind: `live_ci_gate[key] = True` means only "the fresh
|
|
2330
|
+
# read isn't PLAN_READY" — true both while checks are still genuinely running
|
|
2331
|
+
# AND once they've reported a confirmed FAILURE. Before this, both shapes hit
|
|
2332
|
+
# the same "still shut ⇒ stay parked" branch, and only the narrower
|
|
2333
|
+
# `CI_UNREADABLE_PREFIX` shape got its `last_reason` rewritten. A completed,
|
|
2334
|
+
# failing run was therefore indistinguishable from a slow one — coord-portal
|
|
2335
|
+
# #131 sat parked 1h40m past its watched check reporting FAILURE, with the
|
|
2336
|
+
# `last_reason` still reading "CI running: ..." the whole time.
|
|
2337
|
+
|
|
2338
|
+
|
|
2339
|
+
def test_a_parked_entry_resumes_on_a_confirmed_ci_failure():
|
|
2340
|
+
"""The core regression: a fresh, terminal ("CI failed: ...") live reading
|
|
2341
|
+
must resume the entry from `parked`, not re-confirm the park — so it
|
|
2342
|
+
falls into the normal `waiting`/launch path and a relaunched `coord
|
|
2343
|
+
drive` can route it through the existing checks_failed handling."""
|
|
2344
|
+
entries = [
|
|
2345
|
+
entry(
|
|
2346
|
+
2556, position=3, state="parked", attempts=0,
|
|
2347
|
+
last_reason="CI running: e2e smoke (playwright), launched 2789s ago",
|
|
2348
|
+
)
|
|
2349
|
+
]
|
|
2350
|
+
live_reason = "CI failed: e2e smoke (playwright) (FAILURE)"
|
|
2351
|
+
plan = plan_tick(
|
|
2352
|
+
entries, board(), capacity=1, now=NOW,
|
|
2353
|
+
live_ci_gate={entry_key(REPO, 2556): True},
|
|
2354
|
+
live_ci_gate_reason={entry_key(REPO, 2556): live_reason},
|
|
2355
|
+
)
|
|
2356
|
+
resumed = [r for r in plan.reconciles if r.key == entry_key(REPO, 2556)]
|
|
2357
|
+
assert [r.outcome for r in resumed] == ["resumed"]
|
|
2358
|
+
assert resumed[0].updates["state"] == STATE_WAITING
|
|
2359
|
+
# No attempt spent — a fresh GitHub read is not a failed launch attempt.
|
|
2360
|
+
assert resumed[0].updates["attempts"] == 0
|
|
2361
|
+
assert "CI failed" in resumed[0].updates["last_reason"]
|
|
2362
|
+
# Falls straight into this SAME tick's launch selection.
|
|
2363
|
+
assert plan.launch is not None and plan.launch.issue == 2556
|
|
2364
|
+
|
|
2365
|
+
|
|
2366
|
+
def test_a_parked_entry_resumes_on_confirmed_ci_failure_even_at_capacity():
|
|
2367
|
+
"""Acceptance: this re-evaluation happens even when the fleet is fully
|
|
2368
|
+
occupied — #1891 step 1b runs before the capacity check, not after, so a
|
|
2369
|
+
full fleet must never freeze a parked row that has real evidence to act
|
|
2370
|
+
on."""
|
|
2371
|
+
running = running_since(1762, 5.0)
|
|
2372
|
+
parked = entry(
|
|
2373
|
+
2556, position=3, state="parked", attempts=0,
|
|
2374
|
+
last_reason="CI running: e2e smoke (playwright), launched 2789s ago",
|
|
2375
|
+
)
|
|
2376
|
+
live_reason = "CI failed: e2e smoke (playwright) (FAILURE)"
|
|
2377
|
+
plan = plan_tick(
|
|
2378
|
+
[running, parked],
|
|
2379
|
+
board(sessions=(1762,)),
|
|
2380
|
+
capacity=1, # the one slot is already occupied by `running`
|
|
2381
|
+
now=NOW,
|
|
2382
|
+
live_ci_gate={entry_key(REPO, 2556): True},
|
|
2383
|
+
live_ci_gate_reason={entry_key(REPO, 2556): live_reason},
|
|
2384
|
+
)
|
|
2385
|
+
assert plan.occupied == 1
|
|
2386
|
+
assert plan.free_slots == 0
|
|
2387
|
+
resumed = [r for r in plan.reconciles if r.key == entry_key(REPO, 2556)]
|
|
2388
|
+
assert [r.outcome for r in resumed] == ["resumed"]
|
|
2389
|
+
assert resumed[0].updates["state"] == STATE_WAITING
|
|
2390
|
+
# No free slot, so nothing launches this tick — but the row itself has
|
|
2391
|
+
# left `parked`, which is the whole point: it no longer wedges silently.
|
|
2392
|
+
assert plan.launch is None
|
|
2393
|
+
|
|
2394
|
+
|
|
2395
|
+
def test_a_parked_entry_still_stays_parked_while_genuinely_pending():
|
|
2396
|
+
"""Baseline unchanged: a fresh reading that is STILL `CI_PENDING_PREFIX`
|
|
2397
|
+
shaped (checks exist, still running) must not be mistaken for a terminal
|
|
2398
|
+
read — this is the ordinary #1891/#2182 "still shut" case."""
|
|
2399
|
+
entries = [
|
|
2400
|
+
entry(
|
|
2401
|
+
2556, position=3, state="parked", attempts=0,
|
|
2402
|
+
last_reason="CI running: e2e smoke (playwright), launched 2789s ago",
|
|
2403
|
+
)
|
|
2404
|
+
]
|
|
2405
|
+
plan = plan_tick(
|
|
2406
|
+
entries, board(), capacity=1, now=NOW,
|
|
2407
|
+
live_ci_gate={entry_key(REPO, 2556): True},
|
|
2408
|
+
live_ci_gate_reason={
|
|
2409
|
+
entry_key(REPO, 2556): "CI running: e2e smoke (playwright)"
|
|
2410
|
+
},
|
|
2411
|
+
)
|
|
2412
|
+
assert not any(r.key == entry_key(REPO, 2556) for r in plan.reconciles)
|
|
2413
|
+
assert plan.launch is None
|
|
2414
|
+
|
|
2415
|
+
|
|
2326
2416
|
# ── #2158: a park that cannot refresh itself must age out ──────────────────
|
|
2327
2417
|
|
|
2328
2418
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/requires.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
{code_coordinator-0.5.221 → code_coordinator-0.5.222}/code_coordinator.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|