code-coordinator 0.5.513__tar.gz → 0.5.515__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.513 → code_coordinator-0.5.515}/PKG-INFO +1 -1
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/ci_store.py +20 -5
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/claim.py +30 -12
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dispatch.py +11 -7
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dispatch_liveness.py +23 -16
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/merge_queue.py +18 -2
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/milestone_dispatch.py +6 -4
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/reconcile.py +33 -18
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/smoke.py +13 -6
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_ci_store.py +40 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_claim.py +34 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_network.py +1 -1
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dispatch.py +29 -7
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dispatch_liveness.py +20 -2
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_merge_queue.py +136 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reconcile.py +56 -3
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_smoke.py +44 -5
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/.gitignore +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/CLAUDE.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/GOAL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/LICENSE +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/MANIFEST.in +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/README.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/__init__.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/agent.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/audit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/backup.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/block_log.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/board_service.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/brain.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/cli.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/client.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/codegen.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/comments.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/config.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dao.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/db.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/deps.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/drive.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/events.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/filelock.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/freshness.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/gates.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/goal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/context.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/models.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/render.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/health/units.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/hooks.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/interactive.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/models.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/network.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/notify.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/openapi.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/parentage.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/plans.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/progress.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/release_window.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/reports.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/review.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/self_health.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/split_work.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/sql.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/state.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/test_author.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/test_report.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/usage.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/install-agent.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/pyproject.toml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/setup.cfg +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/__init__.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/backends.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/conftest.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_client.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_config.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_db.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_events.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_init.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_models.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_network.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_review.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_session.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_split.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_state.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.513 → code_coordinator-0.5.515}/tests/write_parity.py +0 -0
|
@@ -539,6 +539,25 @@ CI_RERUN_POLL_INTERVAL_SECONDS = 10.0
|
|
|
539
539
|
CI_RERUN_MAX_WAIT_SECONDS = 360.0
|
|
540
540
|
|
|
541
541
|
|
|
542
|
+
def is_unreadable_check_name(name: str) -> bool:
|
|
543
|
+
"""The name-only half of :func:`is_unreadable_check` (#3438).
|
|
544
|
+
|
|
545
|
+
Split out so a caller holding only a bare check *name* — not a full
|
|
546
|
+
``CheckRun`` with a ``.conclusion`` — can still recognize the #1525
|
|
547
|
+
synthetic stand-in. This is exactly the shape of
|
|
548
|
+
``QueuedMerge.ci_seen_check_names_json`` (:mod:`coord.merge_queue`'s
|
|
549
|
+
#3263 shrinkage guard persists names, not whole ``CheckRun`` objects),
|
|
550
|
+
so a row poisoned before #3438's write-side fix — one whose stored JSON
|
|
551
|
+
already contains a synthetic name — can be filtered on *read* too,
|
|
552
|
+
recovering in place rather than needing manual DB repair.
|
|
553
|
+
|
|
554
|
+
One question, one answer: :func:`is_unreadable_check` delegates here for
|
|
555
|
+
its own name check rather than re-deriving the same prefix/substring
|
|
556
|
+
test, so the two can never drift apart.
|
|
557
|
+
"""
|
|
558
|
+
return name.startswith("coord: ") and "read CI status" in name
|
|
559
|
+
|
|
560
|
+
|
|
542
561
|
def is_unreadable_check(check) -> bool:
|
|
543
562
|
"""True for the #1525 synthetic "could not read CI status" / "gh too
|
|
544
563
|
old" stand-ins (``coord.ci_github._unreadable_check`` /
|
|
@@ -570,11 +589,7 @@ def is_unreadable_check(check) -> bool:
|
|
|
570
589
|
than the prose these three call sites already commit to.
|
|
571
590
|
"""
|
|
572
591
|
name = str(getattr(check, "name", ""))
|
|
573
|
-
return (
|
|
574
|
-
getattr(check, "conclusion", None) == "unknown"
|
|
575
|
-
and name.startswith("coord: ")
|
|
576
|
-
and "read CI status" in name
|
|
577
|
-
)
|
|
592
|
+
return getattr(check, "conclusion", None) == "unknown" and is_unreadable_check_name(name)
|
|
578
593
|
|
|
579
594
|
|
|
580
595
|
@dataclass
|
|
@@ -454,20 +454,38 @@ def _default_branch_lookup(repo_github: str, issue_number: int) -> list[str]:
|
|
|
454
454
|
return _drop_merged_branches(repo_github, branches)
|
|
455
455
|
|
|
456
456
|
|
|
457
|
-
def any_matching_branch_merged(
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
457
|
+
def any_matching_branch_merged(
|
|
458
|
+
repo_github: str, issue_number: int, *, branch: str | None = None
|
|
459
|
+
) -> bool:
|
|
460
|
+
"""#3376: True when the branch a dispatch is about to act on has already
|
|
461
|
+
merged into the repo's default branch — the `branch_merged` predicate
|
|
462
|
+
`coord.dispatch_liveness.check_dispatch_liveness` needs, backed by a
|
|
463
|
+
live GitHub check.
|
|
464
|
+
|
|
465
|
+
#3436: when *branch* is given — the exact branch the dispatch targets,
|
|
466
|
+
e.g. an `Assignment.branch` or `Proposal.target_branch` — this checks
|
|
467
|
+
ONLY that branch and ignores every other `issue-{N}-*` sibling. Without
|
|
468
|
+
this, the issue-scoped fallback below answers "has ANY branch for this
|
|
469
|
+
issue merged", which a single zero-commit review-leg branch (cut from
|
|
470
|
+
the then-current default-branch tip and never diverged — routine
|
|
471
|
+
residue of a review/scoped-review leg, not evidence the real work
|
|
472
|
+
landed) trips forever, permanently refusing dispatch for an issue whose
|
|
473
|
+
actual work branch sits unmerged with real commits on it.
|
|
474
|
+
|
|
475
|
+
Falls back to the original issue-scoped "has ANY matching branch
|
|
476
|
+
merged" behaviour only when *branch* is `None` — a caller with nothing
|
|
477
|
+
assigned yet (a pre-dispatch check before any branch exists) has no
|
|
478
|
+
single branch to ask about, so the issue-scoped signal is the best one
|
|
479
|
+
available. Reuses the exact merge-detection `_drop_merged_branches`
|
|
480
|
+
already performs for claim detection (PR-merged OR `ahead_by == 0`
|
|
481
|
+
ancestry, survives squash merges — #3103): this is just "did filtering
|
|
482
|
+
drop anything", with the fail-open direction flipped to match a
|
|
483
|
+
REFUSAL predicate rather than a claim-signal — no matching branch at
|
|
484
|
+
all, or any lookup failure, returns `False` ("not merged, don't refuse
|
|
469
485
|
dispatch on this"), never `True`.
|
|
470
486
|
"""
|
|
487
|
+
if branch is not None:
|
|
488
|
+
return not _drop_merged_branches(repo_github, [branch])
|
|
471
489
|
branches = list_matching_remote_branches(repo_github, issue_number)
|
|
472
490
|
if not branches:
|
|
473
491
|
return False
|
|
@@ -653,12 +653,16 @@ def dispatch(
|
|
|
653
653
|
like every caller that predates this parameter — same opt-in shape as
|
|
654
654
|
*status_fetcher*.
|
|
655
655
|
|
|
656
|
-
*issue_liveness_fetcher* (#3376) is `(repo_name: str, issue_number: int
|
|
657
|
-
-> (issue_closed: bool, branch_merged: bool)` — the
|
|
658
|
-
predicates of the same STRUCTURAL DISPATCH-LIVENESS GATE.
|
|
659
|
-
default) performs no check at all and refuses nothing, same
|
|
660
|
-
shape as *credential_fetcher*.
|
|
661
|
-
|
|
656
|
+
*issue_liveness_fetcher* (#3376) is `(repo_name: str, issue_number: int,
|
|
657
|
+
branch: str | None) -> (issue_closed: bool, branch_merged: bool)` — the
|
|
658
|
+
other two predicates of the same STRUCTURAL DISPATCH-LIVENESS GATE.
|
|
659
|
+
`None` (the default) performs no check at all and refuses nothing, same
|
|
660
|
+
opt-in shape as *credential_fetcher*. `branch` (#3436) is
|
|
661
|
+
`proposal.target_branch` — the exact branch THIS dispatch would land
|
|
662
|
+
on, not merely some `issue-{N}-*` sibling — so a zero-commit review-leg
|
|
663
|
+
branch cut from the default branch never masquerades as "this issue's
|
|
664
|
+
work already merged". See `coord.dispatch_liveness` for the single
|
|
665
|
+
function all three predicates funnel through.
|
|
662
666
|
"""
|
|
663
667
|
machine = next(
|
|
664
668
|
(m for m in config.machines if m.name == proposal.machine_name), None
|
|
@@ -865,7 +869,7 @@ def dispatch(
|
|
|
865
869
|
branch_merged: bool | None = None
|
|
866
870
|
if issue_liveness_fetcher is not None:
|
|
867
871
|
issue_closed, branch_merged = issue_liveness_fetcher(
|
|
868
|
-
proposal.repo_name, proposal.issue_number
|
|
872
|
+
proposal.repo_name, proposal.issue_number, proposal.target_branch
|
|
869
873
|
)
|
|
870
874
|
machine_healthy: bool | None = None
|
|
871
875
|
if credential_fetcher is not None:
|
|
@@ -148,8 +148,8 @@ def check_dispatch_liveness(
|
|
|
148
148
|
|
|
149
149
|
def github_issue_liveness_fetcher(
|
|
150
150
|
config: "Config",
|
|
151
|
-
) -> Callable[[str, int], tuple[bool, bool]]:
|
|
152
|
-
"""Build a REAL `(repo_name, issue_number) -> (issue_closed,
|
|
151
|
+
) -> Callable[[str, int, str | None], tuple[bool, bool]]:
|
|
152
|
+
"""Build a REAL `(repo_name, issue_number, branch) -> (issue_closed,
|
|
153
153
|
branch_merged)` fetcher, backed by live GitHub calls — the piece #3376
|
|
154
154
|
review round 1 found missing: `check_dispatch_liveness`'s two new
|
|
155
155
|
predicates existed and were unit-tested, but every actual dispatch
|
|
@@ -165,30 +165,37 @@ def github_issue_liveness_fetcher(
|
|
|
165
165
|
|
|
166
166
|
Resolves `repo_name` (coordinator.yml's internal name) to `owner/repo`
|
|
167
167
|
via *config* — every fetcher call inside `coord.dispatch.dispatch()`
|
|
168
|
-
only ever hands this `(proposal.repo_name, proposal.issue_number
|
|
169
|
-
the GitHub-repo mapping has to happen
|
|
170
|
-
call site.
|
|
168
|
+
only ever hands this `(proposal.repo_name, proposal.issue_number,
|
|
169
|
+
proposal.target_branch)`, so the GitHub-repo mapping has to happen
|
|
170
|
+
inside the closure, not at the call site.
|
|
171
171
|
|
|
172
172
|
issue_closed: `coord.github_ops.issue_is_closed` — one `gh` call.
|
|
173
|
-
branch_merged: `coord.claim.any_matching_branch_merged` —
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
173
|
+
branch_merged: `coord.claim.any_matching_branch_merged` — #3436: when
|
|
174
|
+
*branch* is given (the dispatch's actual target — e.g. `Assignment.
|
|
175
|
+
branch`/`Proposal.target_branch`), asks whether THAT branch has merged
|
|
176
|
+
and ignores every other `issue-{N}-*` sibling, so a zero-commit
|
|
177
|
+
review-leg branch cut from the default-branch tip can no longer
|
|
178
|
+
permanently refuse dispatch for the issue's real, unmerged work
|
|
179
|
+
branch. `branch=None` (a caller with nothing dispatched yet) falls
|
|
180
|
+
back to the original issue-scoped "any matching branch merged" check.
|
|
181
|
+
Both fail open (`False`) on any GitHub/network hiccup — same "never
|
|
182
|
+
refuse on evidence we don't have" posture `claude_credential_reachable`
|
|
183
|
+
documents for the third predicate, and matching `issue_is_closed`'s/
|
|
184
|
+
`pr_is_merged`'s own documented fail-open contracts.
|
|
182
185
|
"""
|
|
183
186
|
|
|
184
|
-
def fetcher(
|
|
187
|
+
def fetcher(
|
|
188
|
+
repo_name: str, issue_number: int, branch: str | None = None
|
|
189
|
+
) -> tuple[bool, bool]:
|
|
185
190
|
from coord import github_ops # noqa: PLC0415
|
|
186
191
|
from coord.claim import any_matching_branch_merged # noqa: PLC0415
|
|
187
192
|
|
|
188
193
|
repo_cfg = config.repo(repo_name)
|
|
189
194
|
repo_github = repo_cfg.github if repo_cfg is not None else repo_name
|
|
190
195
|
issue_closed = github_ops.issue_is_closed(repo_github, issue_number)
|
|
191
|
-
branch_merged = any_matching_branch_merged(
|
|
196
|
+
branch_merged = any_matching_branch_merged(
|
|
197
|
+
repo_github, issue_number, branch=branch
|
|
198
|
+
)
|
|
192
199
|
return issue_closed, branch_merged
|
|
193
200
|
|
|
194
201
|
return fetcher
|
|
@@ -38,6 +38,7 @@ from coord.ci_store import (
|
|
|
38
38
|
failed_checks,
|
|
39
39
|
in_flight_checks,
|
|
40
40
|
is_unreadable_check,
|
|
41
|
+
is_unreadable_check_name,
|
|
41
42
|
is_verdictless_job,
|
|
42
43
|
shrunk_check_names,
|
|
43
44
|
summarize,
|
|
@@ -2442,7 +2443,11 @@ def _ci_seen_check_names(entry: "QueuedMerge") -> frozenset[str]:
|
|
|
2442
2443
|
return frozenset()
|
|
2443
2444
|
if not isinstance(names, list):
|
|
2444
2445
|
return frozenset()
|
|
2445
|
-
|
|
2446
|
+
# #3438: filter defensively on READ too, not just at the #3438 write-side
|
|
2447
|
+
# fix in `_ci_record_seen_check_names` — a row already poisoned in the
|
|
2448
|
+
# wild (written before this fix) recovers on its very next read here,
|
|
2449
|
+
# rather than being stuck until someone hand-edits the DB.
|
|
2450
|
+
return frozenset(str(n) for n in names if not is_unreadable_check_name(str(n)))
|
|
2446
2451
|
|
|
2447
2452
|
|
|
2448
2453
|
def _ci_record_seen_check_names(entry: "QueuedMerge", checks: list[CheckRun]) -> None:
|
|
@@ -2462,9 +2467,20 @@ def _ci_record_seen_check_names(entry: "QueuedMerge", checks: list[CheckRun]) ->
|
|
|
2462
2467
|
that disappears for more than one consecutive tick keeps being flagged
|
|
2463
2468
|
rather than being silently dropped from the record the moment it first
|
|
2464
2469
|
vanishes.
|
|
2470
|
+
|
|
2471
|
+
#3438: the #1525 synthetic "could not read CI status" stand-in
|
|
2472
|
+
(:func:`coord.ci_store.is_unreadable_check`) is excluded from
|
|
2473
|
+
*current_names* on BOTH branches. That stand-in only ever appears in a
|
|
2474
|
+
read where the real checks could not be fetched at all; memoizing its
|
|
2475
|
+
name would poison this entry permanently, because the only read that
|
|
2476
|
+
could ever re-supply it (another failed fetch) would simultaneously
|
|
2477
|
+
fail to report every real check name too, which the #3263 guard would
|
|
2478
|
+
also reject as shrinkage — a closed loop with no exit. Filtering here,
|
|
2479
|
+
at the point of record, means it never enters
|
|
2480
|
+
``ci_seen_check_names_json`` in the first place, on either branch.
|
|
2465
2481
|
"""
|
|
2466
2482
|
sha = entry.branch_head_sha or ""
|
|
2467
|
-
current_names = {c.name for c in checks}
|
|
2483
|
+
current_names = {c.name for c in checks if not is_unreadable_check(c)}
|
|
2468
2484
|
if entry.ci_seen_checks_sha != sha:
|
|
2469
2485
|
entry.ci_seen_checks_sha = sha
|
|
2470
2486
|
entry.ci_seen_check_names_json = json.dumps(sorted(current_names))
|
|
@@ -1092,10 +1092,12 @@ def dispatch_entry(
|
|
|
1092
1092
|
assign`), matching the same check ``_dispatch_headless`` performs.
|
|
1093
1093
|
|
|
1094
1094
|
*issue_liveness_fetcher* (#3376) is an optional ``(repo_name: str,
|
|
1095
|
-
issue_number: int) -> (issue_closed: bool,
|
|
1096
|
-
callable threaded straight through to
|
|
1097
|
-
parameter of the same name — the
|
|
1098
|
-
other two predicates
|
|
1095
|
+
issue_number: int, branch: str | None) -> (issue_closed: bool,
|
|
1096
|
+
branch_merged: bool)`` callable threaded straight through to
|
|
1097
|
+
:func:`coord.dispatch.dispatch`'s parameter of the same name — the
|
|
1098
|
+
STRUCTURAL DISPATCH-LIVENESS GATE's other two predicates (#3436:
|
|
1099
|
+
``dispatch()`` itself supplies the branch, from ``proposal.
|
|
1100
|
+
target_branch``). ``None`` (the default) performs no check and
|
|
1099
1101
|
refuses nothing, same opt-in shape as every other fetcher in this
|
|
1100
1102
|
module; the daemon's auto-drain/gate ticks (``coord.serve_app``'s
|
|
1101
1103
|
``_milestone_drain_tick``/``_milestone_gate_tick``) are the production
|
|
@@ -1752,7 +1752,10 @@ def _resolve_retry_provider(
|
|
|
1752
1752
|
|
|
1753
1753
|
|
|
1754
1754
|
def _issue_liveness_from_cache(
|
|
1755
|
-
board: Board,
|
|
1755
|
+
board: Board,
|
|
1756
|
+
repo_name: str,
|
|
1757
|
+
issue_number: int,
|
|
1758
|
+
branch: str | None = None,
|
|
1756
1759
|
) -> tuple[bool, bool]:
|
|
1757
1760
|
"""#3376: local-only ``issue_liveness_fetcher`` for `_reassign` —
|
|
1758
1761
|
"issue closed" from the local `issues` cache table (`coord.state.
|
|
@@ -1763,6 +1766,14 @@ def _issue_liveness_from_cache(
|
|
|
1763
1766
|
``"merged"``). Neither call touches GitHub — same "no live probe from
|
|
1764
1767
|
a passive tick" posture as the ``cached_labels`` lookup beside this
|
|
1765
1768
|
function's one caller.
|
|
1769
|
+
|
|
1770
|
+
#3436: when *branch* is given (the failed row's own `Assignment.
|
|
1771
|
+
branch` — the branch a retry would actually land on), the "merged"
|
|
1772
|
+
scan is additionally scoped to rows on THAT branch, not merely any
|
|
1773
|
+
completed row for the issue — a merged review-leg row for the same
|
|
1774
|
+
issue on a *different*, zero-commit branch must not read as "this
|
|
1775
|
+
issue's work already merged" and block a retry of the real, unmerged
|
|
1776
|
+
work branch. `branch=None` keeps the original issue-scoped behaviour.
|
|
1766
1777
|
"""
|
|
1767
1778
|
from coord.state import get_cached_issue_state # noqa: PLC0415
|
|
1768
1779
|
|
|
@@ -1771,6 +1782,7 @@ def _issue_liveness_from_cache(
|
|
|
1771
1782
|
a.repo_name == repo_name
|
|
1772
1783
|
and a.issue_number == issue_number
|
|
1773
1784
|
and a.status == "merged"
|
|
1785
|
+
and (branch is None or a.branch == branch)
|
|
1774
1786
|
for a in board.completed
|
|
1775
1787
|
)
|
|
1776
1788
|
return issue_closed, branch_merged
|
|
@@ -1812,20 +1824,23 @@ def _reassign(
|
|
|
1812
1824
|
entry point.
|
|
1813
1825
|
|
|
1814
1826
|
*issue_liveness_fetcher* (#3376) is an optional ``(repo_name: str,
|
|
1815
|
-
issue_number: int) -> (issue_closed: bool,
|
|
1816
|
-
callable — the other two predicates of the same
|
|
1817
|
-
LIVENESS GATE `coord.dispatch.dispatch()` itself
|
|
1818
|
-
`coord.dispatch_liveness`). `None` (the default here)
|
|
1819
|
-
check and skips nothing — same opt-in shape as
|
|
1820
|
-
above, for the same reason: the real wiring
|
|
1821
|
-
own call site. Unlike *credential_fetcher*
|
|
1822
|
-
unhealthy machine is simply excluded from
|
|
1823
|
-
hit here means the auto-reassign attempt
|
|
1824
|
-
own incident was exactly this shape one
|
|
1825
|
-
review dispatches against a dead host);
|
|
1826
|
-
the thing being retried still real at
|
|
1827
|
-
(skip, exactly like "no candidate
|
|
1828
|
-
another machine.
|
|
1827
|
+
issue_number: int, branch: str | None) -> (issue_closed: bool,
|
|
1828
|
+
branch_merged: bool)`` callable — the other two predicates of the same
|
|
1829
|
+
STRUCTURAL DISPATCH-LIVENESS GATE `coord.dispatch.dispatch()` itself
|
|
1830
|
+
checks (see `coord.dispatch_liveness`). `None` (the default here)
|
|
1831
|
+
performs no check and skips nothing — same opt-in shape as
|
|
1832
|
+
*credential_fetcher* above, for the same reason: the real wiring
|
|
1833
|
+
happens at `reconcile()`'s own call site. Unlike *credential_fetcher*
|
|
1834
|
+
(a machine FILTER — an unhealthy machine is simply excluded from
|
|
1835
|
+
*candidates*), a positive hit here means the auto-reassign attempt
|
|
1836
|
+
itself is pointless — #3367's own incident was exactly this shape one
|
|
1837
|
+
layer up (four auto-retried review dispatches against a dead host);
|
|
1838
|
+
#3376 generalizes it to "is the thing being retried still real at
|
|
1839
|
+
all", so this returns ``None`` (skip, exactly like "no candidate
|
|
1840
|
+
machines") rather than trying another machine. #3436: *branch* is
|
|
1841
|
+
``failed.branch`` — the exact branch a retry would land on — so a
|
|
1842
|
+
merged sibling branch for the same issue no longer masquerades as
|
|
1843
|
+
"this issue's work already merged".
|
|
1829
1844
|
|
|
1830
1845
|
Raises :class:`UnsupportedRetryType` when ``failed.type`` is not in
|
|
1831
1846
|
:data:`coord.models.WORK_LIKE_TYPES` — a ``smoke``/``review``/other
|
|
@@ -1842,7 +1857,7 @@ def _reassign(
|
|
|
1842
1857
|
|
|
1843
1858
|
if issue_liveness_fetcher is not None:
|
|
1844
1859
|
issue_closed, branch_merged = issue_liveness_fetcher(
|
|
1845
|
-
failed.repo_name, failed.issue_number
|
|
1860
|
+
failed.repo_name, failed.issue_number, failed.branch
|
|
1846
1861
|
)
|
|
1847
1862
|
refusal = check_dispatch_liveness(
|
|
1848
1863
|
repo_name=failed.repo_name,
|
|
@@ -2797,8 +2812,8 @@ def reconcile(board: Board, config: Config) -> list[str]:
|
|
|
2797
2812
|
reassigned = _reassign(
|
|
2798
2813
|
failed_a, board, config, issue_labels=cached_labels,
|
|
2799
2814
|
credential_fetcher=claude_credential_reachable,
|
|
2800
|
-
issue_liveness_fetcher=lambda repo, num: (
|
|
2801
|
-
_issue_liveness_from_cache(board, repo, num)
|
|
2815
|
+
issue_liveness_fetcher=lambda repo, num, branch=None: (
|
|
2816
|
+
_issue_liveness_from_cache(board, repo, num, branch)
|
|
2802
2817
|
),
|
|
2803
2818
|
)
|
|
2804
2819
|
except RetryProviderMismatch:
|
|
@@ -3033,7 +3033,9 @@ def dispatch_pending_smoke(
|
|
|
3033
3033
|
*,
|
|
3034
3034
|
now: float | None = None,
|
|
3035
3035
|
gh_ops: "GhOps | None" = None,
|
|
3036
|
-
issue_liveness_fetcher:
|
|
3036
|
+
issue_liveness_fetcher: (
|
|
3037
|
+
Callable[[str, int, str | None], tuple[bool, bool]] | None
|
|
3038
|
+
) = None,
|
|
3037
3039
|
) -> list[Assignment]:
|
|
3038
3040
|
"""Bulk Test-stage dispatch — the smoke analogue of
|
|
3039
3041
|
:func:`coord.review.dispatch_pending_reviews`.
|
|
@@ -3066,10 +3068,15 @@ def dispatch_pending_smoke(
|
|
|
3066
3068
|
live gate check in this codebase hands `merge_queue`'s gate functions.
|
|
3067
3069
|
|
|
3068
3070
|
#3375: *issue_liveness_fetcher* is the SAME opt-in
|
|
3069
|
-
``(repo_name, issue_number) -> (issue_closed, branch_merged)``
|
|
3070
|
-
`coord.dispatch_liveness.check_dispatch_liveness` already
|
|
3071
|
-
`coord.dispatch.dispatch()` with (#3376) — but this stage never
|
|
3072
|
-
through that call path. `
|
|
3071
|
+
``(repo_name, issue_number, branch) -> (issue_closed, branch_merged)``
|
|
3072
|
+
contract `coord.dispatch_liveness.check_dispatch_liveness` already
|
|
3073
|
+
gates `coord.dispatch.dispatch()` with (#3376) — but this stage never
|
|
3074
|
+
went through that call path. #3436: *branch* is `completed.branch` —
|
|
3075
|
+
the row's own branch, not merely some `issue-{N}-*` sibling — so a
|
|
3076
|
+
zero-commit review-leg branch cut from the default branch can no
|
|
3077
|
+
longer masquerade as "this issue's work already merged" and
|
|
3078
|
+
permanently skip the Test stage for the real, unmerged work branch.
|
|
3079
|
+
`dispatch_smoke`/`_dispatch_smoke_legs` POST
|
|
3073
3080
|
straight to a machine's `/assign` over `httpx`, so #3376's dispatch-time
|
|
3074
3081
|
gate never saw a Test-stage dispatch at all, and the five-smoke-agents
|
|
3075
3082
|
incident that motivated both issues could still reproduce after #3376
|
|
@@ -3316,7 +3323,7 @@ def dispatch_pending_smoke(
|
|
|
3316
3323
|
)
|
|
3317
3324
|
|
|
3318
3325
|
issue_closed, branch_merged = issue_liveness_fetcher(
|
|
3319
|
-
completed.repo_name, completed.issue_number
|
|
3326
|
+
completed.repo_name, completed.issue_number, completed.branch
|
|
3320
3327
|
)
|
|
3321
3328
|
refusal = check_dispatch_liveness(
|
|
3322
3329
|
repo_name=completed.repo_name,
|
|
@@ -218,6 +218,46 @@ class TestShrunkCheckNames:
|
|
|
218
218
|
assert shrunk_check_names(seen, checks) == frozenset({"a", "b"})
|
|
219
219
|
|
|
220
220
|
|
|
221
|
+
class TestIsUnreadableCheckName:
|
|
222
|
+
"""#3438: the name-only half of `is_unreadable_check`, split out so a
|
|
223
|
+
caller holding only a bare check NAME (e.g. `coord.merge_queue`'s
|
|
224
|
+
persisted `ci_seen_check_names_json`, which stores names, not whole
|
|
225
|
+
`CheckRun` objects) can still recognize the #1525 synthetic stand-in."""
|
|
226
|
+
|
|
227
|
+
def test_matches_the_unreadable_check_stand_in_name(self) -> None:
|
|
228
|
+
from coord.ci_store import is_unreadable_check_name
|
|
229
|
+
name = "coord: could not read CI status for acme/api#99 (HTTP 503)"
|
|
230
|
+
assert is_unreadable_check_name(name) is True
|
|
231
|
+
|
|
232
|
+
def test_matches_the_gh_too_old_stand_in_name(self) -> None:
|
|
233
|
+
from coord.ci_store import is_unreadable_check_name
|
|
234
|
+
name = "coord: gh is too old to read CI status for acme/api#99 (v1.0)"
|
|
235
|
+
assert is_unreadable_check_name(name) is True
|
|
236
|
+
|
|
237
|
+
def test_does_not_match_a_real_check_name(self) -> None:
|
|
238
|
+
from coord.ci_store import is_unreadable_check_name
|
|
239
|
+
assert is_unreadable_check_name("cargo-test") is False
|
|
240
|
+
|
|
241
|
+
def test_does_not_match_the_gate_snapshot_stale_stand_in(self) -> None:
|
|
242
|
+
"""A different `coord: `-prefixed synthetic, for a different local
|
|
243
|
+
condition (#2347's own documented distinction) — must not match
|
|
244
|
+
just because it shares the prefix."""
|
|
245
|
+
from coord.ci_store import is_unreadable_check_name
|
|
246
|
+
name = "coord: gate snapshot stale (120s)"
|
|
247
|
+
assert is_unreadable_check_name(name) is False
|
|
248
|
+
|
|
249
|
+
def test_agrees_with_is_unreadable_check_on_full_check_objects(self) -> None:
|
|
250
|
+
"""One question, one answer: `is_unreadable_check` must delegate
|
|
251
|
+
here rather than re-deriving the same test, so the two can never
|
|
252
|
+
drift apart."""
|
|
253
|
+
from coord.ci_github import _unreadable_check
|
|
254
|
+
from coord.ci_store import is_unreadable_check, is_unreadable_check_name
|
|
255
|
+
|
|
256
|
+
check = _unreadable_check("acme/api", 99, "HTTP 503")
|
|
257
|
+
assert is_unreadable_check(check) is True
|
|
258
|
+
assert is_unreadable_check_name(check.name) is True
|
|
259
|
+
|
|
260
|
+
|
|
221
261
|
class _FakeClock:
|
|
222
262
|
"""Deterministic (clock, sleep) pair for `wait_for_ci_settle` tests
|
|
223
263
|
(#1925) — `sleep` advances the same counter `clock` reads, so a bounded
|
|
@@ -873,6 +873,40 @@ def test_any_matching_branch_merged_false_on_gh_error(monkeypatch) -> None:
|
|
|
873
873
|
assert claim_mod.any_matching_branch_merged("acme/api", 9) is False
|
|
874
874
|
|
|
875
875
|
|
|
876
|
+
def test_any_matching_branch_merged_scoped_branch_ignores_merged_siblings(
|
|
877
|
+
monkeypatch,
|
|
878
|
+
) -> None:
|
|
879
|
+
"""#3436: reproduces vimcode#1156's shape — several MERGED, zero-commit
|
|
880
|
+
`issue-{N}-*` review-leg branches (cut from the default-branch tip,
|
|
881
|
+
never diverged) alongside the one real, unmerged work branch. The
|
|
882
|
+
issue-scoped (no ``branch=``) check is tripped by the merged siblings —
|
|
883
|
+
the documented fallback behaviour for a caller with nothing dispatched
|
|
884
|
+
yet — but a caller that names the ACTUAL branch in play must get an
|
|
885
|
+
answer scoped to just that branch, not "did anything for this issue
|
|
886
|
+
ever merge"."""
|
|
887
|
+
import coord.claim as claim_mod
|
|
888
|
+
|
|
889
|
+
monkeypatch.setattr(
|
|
890
|
+
"coord.github_ops._gh",
|
|
891
|
+
_gh_stub_with_matching_refs(
|
|
892
|
+
["issue-1156-review-fix-1", "issue-1156-real-work"],
|
|
893
|
+
"main",
|
|
894
|
+
{"issue-1156-review-fix-1": 0, "issue-1156-real-work": 5},
|
|
895
|
+
),
|
|
896
|
+
)
|
|
897
|
+
# No branch named: falls back to the issue-scoped check, which still
|
|
898
|
+
# trips on the merged sibling (unchanged pre-#3436 fallback behaviour).
|
|
899
|
+
assert claim_mod.any_matching_branch_merged("acme/api", 1156) is True
|
|
900
|
+
# Scoped to the real, unmerged work branch: must NOT report merged.
|
|
901
|
+
assert claim_mod.any_matching_branch_merged(
|
|
902
|
+
"acme/api", 1156, branch="issue-1156-real-work"
|
|
903
|
+
) is False
|
|
904
|
+
# Scoped to the merged sibling itself: correctly reports merged.
|
|
905
|
+
assert claim_mod.any_matching_branch_merged(
|
|
906
|
+
"acme/api", 1156, branch="issue-1156-review-fix-1"
|
|
907
|
+
) is True
|
|
908
|
+
|
|
909
|
+
|
|
876
910
|
# ── #1553: has_active_work_followup keys on the EFFECTIVE issue ─────────────
|
|
877
911
|
|
|
878
912
|
|
|
@@ -480,7 +480,7 @@ class TestApproveProviderAwareModel:
|
|
|
480
480
|
with patch("coord.dispatch.httpx.post", return_value=mock_resp) as mock_post, \
|
|
481
481
|
patch(
|
|
482
482
|
"coord.dispatch_liveness.github_issue_liveness_fetcher",
|
|
483
|
-
return_value=lambda _repo, _issue: (False, False),
|
|
483
|
+
return_value=lambda _repo, _issue, _branch=None: (False, False),
|
|
484
484
|
), \
|
|
485
485
|
patch("coord.github_ops.get_issue") as mock_get_issue, \
|
|
486
486
|
patch("coord.github_ops.post_issue_comment"):
|
|
@@ -2610,6 +2610,28 @@ class TestDispatchLivenessGate:
|
|
|
2610
2610
|
dispatch(proposal, config)
|
|
2611
2611
|
mock_post.assert_called_once()
|
|
2612
2612
|
|
|
2613
|
+
@patch("coord.dispatch.httpx.post")
|
|
2614
|
+
def test_passes_proposal_target_branch_to_the_fetcher(
|
|
2615
|
+
self, mock_post: MagicMock, config: Config, proposal: Proposal,
|
|
2616
|
+
) -> None:
|
|
2617
|
+
"""#3436: the fetcher must see the DISPATCH'S OWN target branch, not
|
|
2618
|
+
just `(repo_name, issue_number)` — the whole point being that a
|
|
2619
|
+
merged, zero-commit `issue-{N}-*` sibling (e.g. a review-leg
|
|
2620
|
+
branch) must not be able to answer for the real work branch this
|
|
2621
|
+
exact dispatch is about to land on."""
|
|
2622
|
+
mock_resp = MagicMock()
|
|
2623
|
+
mock_resp.json.return_value = {"id": "abc"}
|
|
2624
|
+
mock_post.return_value = mock_resp
|
|
2625
|
+
proposal.target_branch = "issue-10-fix-auth"
|
|
2626
|
+
seen: list[tuple] = []
|
|
2627
|
+
|
|
2628
|
+
def fetcher(repo, num, branch=None):
|
|
2629
|
+
seen.append((repo, num, branch))
|
|
2630
|
+
return False, False
|
|
2631
|
+
|
|
2632
|
+
dispatch(proposal, config, issue_liveness_fetcher=fetcher)
|
|
2633
|
+
assert seen == [("api", 10, "issue-10-fix-auth")]
|
|
2634
|
+
|
|
2613
2635
|
@patch("coord.dispatch.record_dispatch_refusal")
|
|
2614
2636
|
@patch("coord.dispatch.httpx.post")
|
|
2615
2637
|
def test_refuses_a_closed_issue(
|
|
@@ -2619,7 +2641,7 @@ class TestDispatchLivenessGate:
|
|
|
2619
2641
|
with pytest.raises(DispatchRefused, match="already closed"):
|
|
2620
2642
|
dispatch(
|
|
2621
2643
|
proposal, config,
|
|
2622
|
-
issue_liveness_fetcher=lambda repo, num: (True, False),
|
|
2644
|
+
issue_liveness_fetcher=lambda repo, num, branch=None: (True, False),
|
|
2623
2645
|
)
|
|
2624
2646
|
mock_post.assert_not_called()
|
|
2625
2647
|
mock_record.assert_called_once()
|
|
@@ -2633,7 +2655,7 @@ class TestDispatchLivenessGate:
|
|
|
2633
2655
|
with pytest.raises(DispatchRefused, match="already merged"):
|
|
2634
2656
|
dispatch(
|
|
2635
2657
|
proposal, config,
|
|
2636
|
-
issue_liveness_fetcher=lambda repo, num: (False, True),
|
|
2658
|
+
issue_liveness_fetcher=lambda repo, num, branch=None: (False, True),
|
|
2637
2659
|
)
|
|
2638
2660
|
mock_post.assert_not_called()
|
|
2639
2661
|
mock_record.assert_called_once()
|
|
@@ -2647,7 +2669,7 @@ class TestDispatchLivenessGate:
|
|
|
2647
2669
|
mock_post.return_value = mock_resp
|
|
2648
2670
|
dispatch(
|
|
2649
2671
|
proposal, config,
|
|
2650
|
-
issue_liveness_fetcher=lambda repo, num: (False, False),
|
|
2672
|
+
issue_liveness_fetcher=lambda repo, num, branch=None: (False, False),
|
|
2651
2673
|
)
|
|
2652
2674
|
mock_post.assert_called_once()
|
|
2653
2675
|
|
|
@@ -2662,7 +2684,7 @@ class TestDispatchLivenessGate:
|
|
|
2662
2684
|
with pytest.raises(ValueError, match="not routable"):
|
|
2663
2685
|
dispatch(
|
|
2664
2686
|
proposal, config,
|
|
2665
|
-
issue_liveness_fetcher=lambda repo, num: (False, False),
|
|
2687
|
+
issue_liveness_fetcher=lambda repo, num, branch=None: (False, False),
|
|
2666
2688
|
credential_fetcher=lambda m: False,
|
|
2667
2689
|
)
|
|
2668
2690
|
mock_post.assert_not_called()
|
|
@@ -2680,17 +2702,17 @@ class TestDispatchLivenessGate:
|
|
|
2680
2702
|
with pytest.raises(DispatchRefused):
|
|
2681
2703
|
dispatch(
|
|
2682
2704
|
proposal, config,
|
|
2683
|
-
issue_liveness_fetcher=lambda repo, num: (True, False),
|
|
2705
|
+
issue_liveness_fetcher=lambda repo, num, branch=None: (True, False),
|
|
2684
2706
|
)
|
|
2685
2707
|
with pytest.raises(DispatchRefused):
|
|
2686
2708
|
dispatch(
|
|
2687
2709
|
proposal, config,
|
|
2688
|
-
issue_liveness_fetcher=lambda repo, num: (False, True),
|
|
2710
|
+
issue_liveness_fetcher=lambda repo, num, branch=None: (False, True),
|
|
2689
2711
|
)
|
|
2690
2712
|
with pytest.raises(DispatchRefused):
|
|
2691
2713
|
dispatch(
|
|
2692
2714
|
proposal, config,
|
|
2693
|
-
issue_liveness_fetcher=lambda repo, num: (False, False),
|
|
2715
|
+
issue_liveness_fetcher=lambda repo, num, branch=None: (False, False),
|
|
2694
2716
|
credential_fetcher=lambda m: False,
|
|
2695
2717
|
)
|
|
2696
2718
|
mock_post.assert_not_called()
|
|
@@ -140,7 +140,7 @@ class TestGithubIssueLivenessFetcher:
|
|
|
140
140
|
assert issue_closed is True
|
|
141
141
|
assert branch_merged is False
|
|
142
142
|
mock_closed.assert_called_once_with("acme/api", 42)
|
|
143
|
-
mock_merged.assert_called_once_with("acme/api", 42)
|
|
143
|
+
mock_merged.assert_called_once_with("acme/api", 42, branch=None)
|
|
144
144
|
|
|
145
145
|
@patch("coord.claim.any_matching_branch_merged", return_value=True)
|
|
146
146
|
@patch("coord.github_ops.issue_is_closed", return_value=False)
|
|
@@ -167,4 +167,22 @@ class TestGithubIssueLivenessFetcher:
|
|
|
167
167
|
assert issue_closed is False
|
|
168
168
|
assert branch_merged is False
|
|
169
169
|
mock_closed.assert_called_once_with("ghost", 1)
|
|
170
|
-
mock_merged.assert_called_once_with("ghost", 1)
|
|
170
|
+
mock_merged.assert_called_once_with("ghost", 1, branch=None)
|
|
171
|
+
|
|
172
|
+
@patch("coord.claim.any_matching_branch_merged", return_value=False)
|
|
173
|
+
@patch("coord.github_ops.issue_is_closed", return_value=False)
|
|
174
|
+
def test_passes_the_target_branch_through(
|
|
175
|
+
self, mock_closed: MagicMock, mock_merged: MagicMock,
|
|
176
|
+
) -> None:
|
|
177
|
+
"""#3436: a caller that names a specific branch (the dispatch's
|
|
178
|
+
actual target — e.g. `Proposal.target_branch`/`Assignment.branch`)
|
|
179
|
+
must have it forwarded to `any_matching_branch_merged`'s
|
|
180
|
+
branch-scoped check, not silently dropped in favour of the
|
|
181
|
+
issue-scoped fallback."""
|
|
182
|
+
fetcher = github_issue_liveness_fetcher(self._config())
|
|
183
|
+
issue_closed, branch_merged = fetcher("api", 42, "issue-42-real-work")
|
|
184
|
+
assert issue_closed is False
|
|
185
|
+
assert branch_merged is False
|
|
186
|
+
mock_merged.assert_called_once_with(
|
|
187
|
+
"acme/api", 42, branch="issue-42-real-work"
|
|
188
|
+
)
|