code-coordinator 0.5.560__tar.gz → 0.5.562__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.560 → code_coordinator-0.5.562}/PKG-INFO +1 -1
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/acceptance.py +60 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/ci_store.py +12 -5
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dispatch.py +73 -34
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/merge_queue.py +91 -8
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/milestone_dispatch.py +49 -2
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/conftest.py +30 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_acceptance.py +58 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_acceptance_drivers.py +26 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dispatch.py +136 -31
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue.py +21 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_install_agent_wsl_bridge_3515.py +30 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_merge_queue.py +128 -2
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_throwaway_vm.py +29 -4
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/.gitignore +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/CLAUDE.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/GOAL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/LICENSE +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/MANIFEST.in +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/README.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/__init__.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agent.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/audit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/backup.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/block_log.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/board_service.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/brain.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/claim.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/cli.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/client.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/codegen.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/comments.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/config.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dao.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/db.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/deps.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/drive.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/events.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/filelock.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/freshness.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gates.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/goal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/context.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/models.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/render.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/health/units.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/hooks.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/interactive.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/models.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/network.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/notify.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/openapi.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/parentage.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/plans.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/progress.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/release_window.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/reports.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/review.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/self_health.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/smoke.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/split_work.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/sql.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/state.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/test_author.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/test_report.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/usage.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/install-agent.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/pyproject.toml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/setup.cfg +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/__init__.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/backends.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_client.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_db.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_events.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_init.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_models.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_network.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_session.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_split.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_state.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.560 → code_coordinator-0.5.562}/tests/write_parity.py +0 -0
|
@@ -877,6 +877,66 @@ def oracle_loop_contract_block(
|
|
|
877
877
|
if ms_dir is None:
|
|
878
878
|
return ""
|
|
879
879
|
|
|
880
|
+
return _render_oracle_contract_block(
|
|
881
|
+
repo_name, issue_number, ms_dir, acceptance_dirname, exempt=exempt,
|
|
882
|
+
)
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
def oracle_loop_contract_block_for_slice(
|
|
886
|
+
repo_name: str,
|
|
887
|
+
issue_number: int,
|
|
888
|
+
*,
|
|
889
|
+
has_slice: bool,
|
|
890
|
+
exempt: bool,
|
|
891
|
+
ms_dir: str,
|
|
892
|
+
acceptance_dirname: str = ACCEPTANCE_DIRNAME,
|
|
893
|
+
) -> str:
|
|
894
|
+
"""(#2166) The exact same worker-briefing contract text
|
|
895
|
+
:func:`oracle_loop_contract_block` renders, but driven by an already-
|
|
896
|
+
resolved verdict (*has_slice*/*exempt*/*ms_dir*/*acceptance_dirname*)
|
|
897
|
+
instead of scanning a local checkout for one.
|
|
898
|
+
|
|
899
|
+
Exists so :func:`coord.dispatch.dispatch` can build the briefing block
|
|
900
|
+
from the EXACT SAME read :func:`coord.milestone_dispatch.
|
|
901
|
+
issue_oracle_ready` already did for the #1138 hard gate (default
|
|
902
|
+
branch, over ``gh``, one memoised fetch seam) rather than a second,
|
|
903
|
+
independent local-checkout scan that can silently disagree with it —
|
|
904
|
+
the #2166 split-brain: a dispatching host whose base checkout lagged
|
|
905
|
+
the default branch by a few commits had this (the old
|
|
906
|
+
``oracle_loop_contract_block(Path, ...)`` call) come back ``""`` while
|
|
907
|
+
the gate, reading the default branch directly, had already let the
|
|
908
|
+
issue through — so the worker got dispatched with no oracle contract
|
|
909
|
+
at all, silently.
|
|
910
|
+
|
|
911
|
+
Returns ``""`` when *ms_dir* is empty (the gate never resolved a
|
|
912
|
+
milestone for this issue — ``OracleReadiness.applies`` was ``False``)
|
|
913
|
+
or neither *has_slice* nor *exempt* is set (no contract to point at
|
|
914
|
+
yet). Callers that have a full ``OracleReadiness`` in hand should pass
|
|
915
|
+
its ``has_slice``/``exempt``/``ms_dir``/``acceptance_dirname`` fields
|
|
916
|
+
straight through.
|
|
917
|
+
"""
|
|
918
|
+
if not ms_dir or not (has_slice or exempt):
|
|
919
|
+
return ""
|
|
920
|
+
return _render_oracle_contract_block(
|
|
921
|
+
repo_name, issue_number, ms_dir, acceptance_dirname, exempt=exempt,
|
|
922
|
+
)
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
def _render_oracle_contract_block(
|
|
926
|
+
repo_name: str,
|
|
927
|
+
issue_number: int,
|
|
928
|
+
ms_dir: str,
|
|
929
|
+
acceptance_dirname: str,
|
|
930
|
+
*,
|
|
931
|
+
exempt: bool,
|
|
932
|
+
) -> str:
|
|
933
|
+
"""Shared template for :func:`oracle_loop_contract_block` (local-
|
|
934
|
+
checkout scan) and :func:`oracle_loop_contract_block_for_slice`
|
|
935
|
+
(gate-verdict-driven, #2166) — ONE rendering so the text a worker sees
|
|
936
|
+
can never drift between the two slice-presence sources, even though
|
|
937
|
+
which SOURCE decided "there is a slice" differs between the two
|
|
938
|
+
callers.
|
|
939
|
+
"""
|
|
880
940
|
dirname = acceptance_dirname.rstrip("/") if acceptance_dirname else ACCEPTANCE_DIRNAME
|
|
881
941
|
contract_path = f"{dirname}/{ms_dir}/contract.md"
|
|
882
942
|
mocks_dir = f"{dirname}/{ms_dir}/mocks"
|
|
@@ -733,7 +733,7 @@ def is_verdictless_job(check: CheckRun, job: JobRun | None) -> bool:
|
|
|
733
733
|
|
|
734
734
|
|
|
735
735
|
def checks_are_stale(checks: list[CheckRun], base_commit_time: float | None) -> bool:
|
|
736
|
-
"""True when
|
|
736
|
+
"""True when *checks* predate *base_commit_time* (#1851).
|
|
737
737
|
|
|
738
738
|
GitHub attaches ``pull_request`` check runs to the PR's *head* SHA and
|
|
739
739
|
re-runs them on head ``synchronize`` — never on base movement — so a
|
|
@@ -742,10 +742,17 @@ def checks_are_stale(checks: list[CheckRun], base_commit_time: float | None) ->
|
|
|
742
742
|
what matters is what the base looked like when the run *began*, not when
|
|
743
743
|
it finished.
|
|
744
744
|
|
|
745
|
-
|
|
746
|
-
first
|
|
747
|
-
|
|
748
|
-
|
|
745
|
+
Originally written for the caller's all-**passing** remainder — apply
|
|
746
|
+
:func:`failed_checks`/:func:`in_flight_checks` first and pass what's
|
|
747
|
+
left, so this never contradicts "CI failed"/"CI running" with a third,
|
|
748
|
+
competing reading of the same checks. #1986 also calls this with the
|
|
749
|
+
FAILED remainder instead (``coord.merge_queue``'s ``checks_failed``
|
|
750
|
+
path): the comparison itself never inspects ``conclusion``, only
|
|
751
|
+
``started_at``, so "did this run predate the base?" is the identical
|
|
752
|
+
question either way — there is no second notion of CI staleness for the
|
|
753
|
+
red case, only a second caller asking the same one (#2096: one question,
|
|
754
|
+
one answer). Which verdict a stale run carries decides what the caller's
|
|
755
|
+
message says; it never decides whether the merge blocks. An empty
|
|
749
756
|
*checks* list (nothing to compare) reads as not-stale; the caller's own
|
|
750
757
|
"no checks" handling covers that case — see :meth:`CiStore.expects_checks`
|
|
751
758
|
and ``coord.merge_queue``'s ``checks_absent`` gate (#1904), which now
|
|
@@ -12,6 +12,8 @@ import httpx
|
|
|
12
12
|
if TYPE_CHECKING:
|
|
13
13
|
from datetime import datetime
|
|
14
14
|
|
|
15
|
+
from coord.milestone_dispatch import OracleReadiness
|
|
16
|
+
|
|
15
17
|
from coord import github_ops
|
|
16
18
|
from coord.comments import (
|
|
17
19
|
format_advisory,
|
|
@@ -112,7 +114,7 @@ class DispatchRefused(ValueError):
|
|
|
112
114
|
|
|
113
115
|
def enforce_oracle_readiness(
|
|
114
116
|
*, proposal_type: str, repo: Repo | None, config: Config, issue_number: int,
|
|
115
|
-
) -> None:
|
|
117
|
+
) -> "OracleReadiness | None":
|
|
116
118
|
"""#1138: hard-gate a ``type="work"`` dispatch on the issue-level oracle
|
|
117
119
|
gate (:func:`coord.milestone_dispatch.issue_oracle_ready`) — refuses an
|
|
118
120
|
issue that belongs to an oracle-opted-in milestone (Gate A already
|
|
@@ -147,11 +149,23 @@ def enforce_oracle_readiness(
|
|
|
147
149
|
hard stop would turn a GitHub hiccup into a fleet-wide outage for every
|
|
148
150
|
oracle-configured repo, which is a worse failure mode than the gap
|
|
149
151
|
#1138 closes.
|
|
152
|
+
|
|
153
|
+
Returns the :class:`coord.milestone_dispatch.OracleReadiness` verdict
|
|
154
|
+
it computed (``None`` for every cheap-no-op / fail-open case above) —
|
|
155
|
+
(#2166) so ``dispatch()`` can build the worker-briefing oracle-loop
|
|
156
|
+
contract block from THIS SAME verdict instead of re-deriving "does a
|
|
157
|
+
slice exist" via a second, independent read. Before this, the gate
|
|
158
|
+
read the default branch over ``gh`` while the briefing separately
|
|
159
|
+
scanned the dispatching host's local base checkout for a manifest —
|
|
160
|
+
two sources that silently disagreed whenever that checkout lagged
|
|
161
|
+
(#2166's split-brain). One call, reused for both the pass/fail
|
|
162
|
+
decision and the text the worker sees, makes that disagreement
|
|
163
|
+
structurally impossible rather than merely rare.
|
|
150
164
|
"""
|
|
151
165
|
if proposal_type != "work" or repo is None:
|
|
152
|
-
return
|
|
166
|
+
return None
|
|
153
167
|
if not config.acceptance.has_driver(repo.name):
|
|
154
|
-
return
|
|
168
|
+
return None
|
|
155
169
|
|
|
156
170
|
from coord import github_ops # noqa: PLC0415
|
|
157
171
|
from coord.milestone_dispatch import issue_oracle_ready # noqa: PLC0415
|
|
@@ -159,7 +173,7 @@ def enforce_oracle_readiness(
|
|
|
159
173
|
try:
|
|
160
174
|
issue_data = github_ops.get_issue(repo.github, issue_number)
|
|
161
175
|
except RuntimeError:
|
|
162
|
-
return
|
|
176
|
+
return None
|
|
163
177
|
|
|
164
178
|
milestone_number = (issue_data.get("milestone") or {}).get("number")
|
|
165
179
|
issue_labels = [lbl.get("name", "") for lbl in (issue_data.get("labels") or [])]
|
|
@@ -169,6 +183,7 @@ def enforce_oracle_readiness(
|
|
|
169
183
|
)
|
|
170
184
|
if readiness.reason is not None:
|
|
171
185
|
raise DispatchRefused(readiness.reason)
|
|
186
|
+
return readiness
|
|
172
187
|
|
|
173
188
|
|
|
174
189
|
def enforce_epic_dispatch_guard(
|
|
@@ -784,7 +799,11 @@ def dispatch(
|
|
|
784
799
|
# a driver kind this install doesn't implement. Placed early / before
|
|
785
800
|
# the TOS gate below so a refusal never depends on provider resolution
|
|
786
801
|
# succeeding first.
|
|
787
|
-
|
|
802
|
+
#
|
|
803
|
+
# #2166: the returned verdict is reused below to build the worker-
|
|
804
|
+
# briefing oracle-loop contract block — the SAME read this gate just
|
|
805
|
+
# used, not a second independent one — so the two can never disagree.
|
|
806
|
+
oracle_readiness = enforce_oracle_readiness(
|
|
788
807
|
proposal_type=proposal.type, repo=repo, config=config,
|
|
789
808
|
issue_number=proposal.issue_number,
|
|
790
809
|
)
|
|
@@ -994,44 +1013,64 @@ def dispatch(
|
|
|
994
1013
|
# a milestone-level flag, so "driver configured for this repo" is the
|
|
995
1014
|
# signal, mirroring the tests/acceptance/ auto-seal above) AND this issue
|
|
996
1015
|
# already has an authored slice, OR (#3212) is exempted from one —
|
|
997
|
-
#
|
|
998
|
-
# applies (e.g. before Gate A/#931 has run for it at all).
|
|
999
|
-
# waives the automated gate, not the design contract the
|
|
1000
|
-
# mocks define, so the worker still needs the pointer — see
|
|
1001
|
-
#
|
|
1016
|
+
# oracle_loop_contract_block_for_slice covers both and returns "" only
|
|
1017
|
+
# when neither applies (e.g. before Gate A/#931 has run for it at all).
|
|
1018
|
+
# An exemption waives the automated gate, not the design contract the
|
|
1019
|
+
# milestone's mocks define, so the worker still needs the pointer — see
|
|
1020
|
+
# oracle_loop_contract_block_for_slice's docstring for the exempted-issue
|
|
1021
|
+
# variant.
|
|
1022
|
+
#
|
|
1023
|
+
# #2166: this used to re-derive "does a slice exist" by scanning the
|
|
1024
|
+
# dispatching HOST's local base checkout (`repo_root / search_root`) —
|
|
1025
|
+
# a second, independent read from the #1138 gate above, which reads the
|
|
1026
|
+
# default branch over `gh`. A stale base checkout (nothing refreshes it
|
|
1027
|
+
# automatically — see docs/ORACLE_LOOP.md) made the two disagree: the
|
|
1028
|
+
# gate let a dispatch through because the slice existed on the default
|
|
1029
|
+
# branch, while this scan came back `""` because the local clone hadn't
|
|
1030
|
+
# pulled it yet, silently sending the worker with no oracle contract at
|
|
1031
|
+
# all. Now this builds the block from `oracle_readiness` — the EXACT
|
|
1032
|
+
# verdict the gate above already computed — so there is only one read
|
|
1033
|
+
# and the two can never diverge again.
|
|
1002
1034
|
briefing_text = proposal.briefing
|
|
1003
1035
|
if proposal.type == "work" and proposal.issue_number:
|
|
1004
|
-
from pathlib import Path # noqa: PLC0415
|
|
1005
|
-
|
|
1006
1036
|
from coord.state import issue_context_block # noqa: PLC0415
|
|
1007
1037
|
|
|
1008
1038
|
oracle_contract = ""
|
|
1009
1039
|
if config.acceptance.has_driver(proposal.repo_name):
|
|
1010
|
-
from coord.acceptance import
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
# out of the repo root) — this dispatch call has no single path
|
|
1017
|
-
# in hand to pick a route ahead of time (proposal.issue_number
|
|
1018
|
-
# alone doesn't say which), so it tries every search root this
|
|
1019
|
-
# repo declares and uses whichever one actually has the slice.
|
|
1020
|
-
# A local checkout scan (no `gh`), so trying more than one root
|
|
1021
|
-
# costs nothing but a stat/read against a directory that
|
|
1022
|
-
# usually doesn't exist.
|
|
1023
|
-
repo_root = Path(repo_path).expanduser()
|
|
1024
|
-
for search_root in config.acceptance.acceptance_search_roots(
|
|
1025
|
-
proposal.repo_name
|
|
1026
|
-
):
|
|
1027
|
-
oracle_contract = oracle_loop_contract_block(
|
|
1028
|
-
repo_root / search_root,
|
|
1040
|
+
from coord.acceptance import ( # noqa: PLC0415
|
|
1041
|
+
oracle_loop_contract_block_for_slice,
|
|
1042
|
+
)
|
|
1043
|
+
|
|
1044
|
+
if oracle_readiness is not None and oracle_readiness.applies:
|
|
1045
|
+
oracle_contract = oracle_loop_contract_block_for_slice(
|
|
1029
1046
|
proposal.repo_name,
|
|
1030
1047
|
proposal.issue_number,
|
|
1031
|
-
|
|
1048
|
+
has_slice=oracle_readiness.has_slice,
|
|
1049
|
+
exempt=oracle_readiness.exempt,
|
|
1050
|
+
ms_dir=oracle_readiness.ms_dir,
|
|
1051
|
+
acceptance_dirname=oracle_readiness.acceptance_dirname,
|
|
1032
1052
|
)
|
|
1033
|
-
|
|
1034
|
-
|
|
1053
|
+
# #2166 acceptance criterion: a gate must be able to fail,
|
|
1054
|
+
# and unconfirmed success is a defect — if the gate's own
|
|
1055
|
+
# verdict says there's a slice (or an exemption) to point
|
|
1056
|
+
# at, rendering the block must not silently come back
|
|
1057
|
+
# empty. That combination can only mean a bug in the
|
|
1058
|
+
# renderer above, not "no slice yet" (which `applies`/
|
|
1059
|
+
# `has_slice`/`exempt` already ruled out) — refuse loudly
|
|
1060
|
+
# rather than dispatch a worker with a hollow briefing.
|
|
1061
|
+
if (
|
|
1062
|
+
oracle_readiness.has_slice or oracle_readiness.exempt
|
|
1063
|
+
) and not oracle_contract:
|
|
1064
|
+
raise DispatchRefused(
|
|
1065
|
+
f"#2166: internal inconsistency building the "
|
|
1066
|
+
f"oracle-loop briefing for {proposal.repo_name}#"
|
|
1067
|
+
f"{proposal.issue_number} — the gate found a "
|
|
1068
|
+
"slice/exemption (ms_dir="
|
|
1069
|
+
f"{oracle_readiness.ms_dir!r}) but rendering the "
|
|
1070
|
+
"contract block came back empty. Refusing rather "
|
|
1071
|
+
"than dispatching a worker with no oracle "
|
|
1072
|
+
"contract."
|
|
1073
|
+
)
|
|
1035
1074
|
|
|
1036
1075
|
# #1720: dispatch-time file-overlap fence — the union of file
|
|
1037
1076
|
# footprints of every OTHER currently-running work-like assignment
|
|
@@ -2770,9 +2770,19 @@ def _ci_checks_are_stale(
|
|
|
2770
2770
|
*,
|
|
2771
2771
|
fail_closed: bool = True,
|
|
2772
2772
|
) -> bool:
|
|
2773
|
-
"""True when *checks*
|
|
2774
|
-
|
|
2775
|
-
|
|
2773
|
+
"""True when *checks* are stale relative to *target_branch*'s current
|
|
2774
|
+
base (#1851).
|
|
2775
|
+
|
|
2776
|
+
Originally written for the caller's all-PASSING remainder (no
|
|
2777
|
+
failed/in-flight entries) — the ``checks_stale`` path below. #1986 reuses
|
|
2778
|
+
it unchanged for the FAILED remainder too: the underlying comparison
|
|
2779
|
+
(``started_at`` vs. the base's current commit time, via
|
|
2780
|
+
:func:`coord.ci_store.checks_are_stale`) never reads ``conclusion``, so
|
|
2781
|
+
"did this run see the base's current tip?" has exactly one answer
|
|
2782
|
+
regardless of which way the run concluded (#2096: one question, one
|
|
2783
|
+
answer). A stale FAILING check still blocks the merge either way — this
|
|
2784
|
+
only changes whether the refusal names the staleness, never the
|
|
2785
|
+
pass/fail verdict itself.
|
|
2776
2786
|
|
|
2777
2787
|
GitHub does not re-run ``pull_request`` workflows on a base-only move
|
|
2778
2788
|
(only on head ``synchronize``), so a green check can silently outlive the
|
|
@@ -2906,6 +2916,50 @@ def ci_stale_reason(
|
|
|
2906
2916
|
)
|
|
2907
2917
|
|
|
2908
2918
|
|
|
2919
|
+
def checks_failed_stale_suffix(
|
|
2920
|
+
failed: "list[CheckRun]",
|
|
2921
|
+
gh_ops: "GhOps | None",
|
|
2922
|
+
repo_github: str | None,
|
|
2923
|
+
target_branch: str | None,
|
|
2924
|
+
) -> str:
|
|
2925
|
+
"""Clause appended to a ``checks failed: ...`` refusal when the failing
|
|
2926
|
+
run(s) predate *target_branch*'s current base (#1986).
|
|
2927
|
+
|
|
2928
|
+
Hit while merging #1895: a `windows` check was red for `ModuleNotFoundError:
|
|
2929
|
+
No module named 'fcntl'` — a bug #1156 had already fixed on `main` 33
|
|
2930
|
+
commits before this branch's base. The gate reported it as a bare,
|
|
2931
|
+
current-looking failure, inviting either pointless debugging of a defect
|
|
2932
|
+
that no longer exists, or a `--force-merge` reasoned on "it's probably
|
|
2933
|
+
just flaky" — neither of which an operator should have to guess at when
|
|
2934
|
+
the gate already has the evidence.
|
|
2935
|
+
|
|
2936
|
+
#1851/:func:`ci_stale_reason` already answers "did this run see the
|
|
2937
|
+
base's current tip?" for a stale PASSING check; this is the exact same
|
|
2938
|
+
question for a FAILING one, so it reuses :func:`ci_staleness_note` for
|
|
2939
|
+
the anchor wording rather than inventing a second rendering of "predates
|
|
2940
|
+
the base" (#2096: one question, one answer). Callers decide staleness
|
|
2941
|
+
first via :func:`_ci_checks_are_stale` — this never makes that call
|
|
2942
|
+
itself, only renders the clause once asked to.
|
|
2943
|
+
|
|
2944
|
+
Returns ``""`` when the anchors can't be read — the same unreadable case
|
|
2945
|
+
:func:`ci_staleness_note` itself falls back on — so the caller's plain
|
|
2946
|
+
``checks failed: ...`` message prints unchanged rather than asserting
|
|
2947
|
+
staleness evidence this can't actually produce. Either way the refusal
|
|
2948
|
+
still BLOCKS: this only ever adds provenance to an existing block, never
|
|
2949
|
+
removes or downgrades it.
|
|
2950
|
+
"""
|
|
2951
|
+
note = ci_staleness_note(failed, gh_ops, repo_github, target_branch)
|
|
2952
|
+
if not note:
|
|
2953
|
+
return ""
|
|
2954
|
+
branch = target_branch or "the target branch"
|
|
2955
|
+
return (
|
|
2956
|
+
" — but that run predates the current base" + note + " — rebase "
|
|
2957
|
+
f"onto {branch} and push (`git push --force-with-lease`) and let CI "
|
|
2958
|
+
"re-run before trusting this result; a CI re-run against the same "
|
|
2959
|
+
"base cannot see a moved base"
|
|
2960
|
+
)
|
|
2961
|
+
|
|
2962
|
+
|
|
2909
2963
|
# #1826: `--force-merge` still overrides the CI gate, but the override must
|
|
2910
2964
|
# never be SILENT — the same posture `epic_closing_keyword_in_commit_forced`
|
|
2911
2965
|
# already takes for the #1318 gate. A waived stale-CI merge is precisely the
|
|
@@ -7649,11 +7703,26 @@ def process(
|
|
|
7649
7703
|
summary = ", ".join(
|
|
7650
7704
|
f"{c.name} ({c.conclusion})" for c in failed
|
|
7651
7705
|
)
|
|
7652
|
-
|
|
7653
|
-
unreadable_reason
|
|
7654
|
-
|
|
7655
|
-
|
|
7656
|
-
|
|
7706
|
+
if unreadable_reason:
|
|
7707
|
+
msg = unreadable_reason
|
|
7708
|
+
elif infra_reason:
|
|
7709
|
+
msg = infra_reason
|
|
7710
|
+
else:
|
|
7711
|
+
# #1986: preview the same staleness
|
|
7712
|
+
# provenance the live path now adds to a
|
|
7713
|
+
# bare `checks failed: ...` — see
|
|
7714
|
+
# `checks_failed_stale_suffix`'s docstring.
|
|
7715
|
+
# Preview-only: never mutates, just shows
|
|
7716
|
+
# what a real attempt would compute.
|
|
7717
|
+
msg = f"checks failed: {summary}"
|
|
7718
|
+
if _ci_checks_are_stale(
|
|
7719
|
+
failed, gh_ops, entry.repo_github,
|
|
7720
|
+
entry.target_branch, _smoke,
|
|
7721
|
+
):
|
|
7722
|
+
msg += checks_failed_stale_suffix(
|
|
7723
|
+
failed, gh_ops, entry.repo_github,
|
|
7724
|
+
entry.target_branch,
|
|
7725
|
+
)
|
|
7657
7726
|
events.append(MergeEvent(
|
|
7658
7727
|
entry, "checks_failed",
|
|
7659
7728
|
f"(dry run) would be blocked: {msg}",
|
|
@@ -8283,6 +8352,20 @@ def process(
|
|
|
8283
8352
|
# this already-confirmed streak as a flake.
|
|
8284
8353
|
entry.ci_flaky_pending = ""
|
|
8285
8354
|
msg = f"checks failed: {summary}"
|
|
8355
|
+
# #1986: a RED check can be exactly as stale as a GREEN
|
|
8356
|
+
# one (#1851) — it just looks like a current defect
|
|
8357
|
+
# instead of an obvious re-test candidate, which is what
|
|
8358
|
+
# invites either pointless debugging of a bug already
|
|
8359
|
+
# fixed on the current base, or a wrong `--force-merge`.
|
|
8360
|
+
# Reports provenance only; the entry still blocks either
|
|
8361
|
+
# way (see `checks_failed_stale_suffix`'s docstring).
|
|
8362
|
+
if _ci_checks_are_stale(
|
|
8363
|
+
failed, gh_ops, entry.repo_github, entry.target_branch,
|
|
8364
|
+
smoke,
|
|
8365
|
+
):
|
|
8366
|
+
msg += checks_failed_stale_suffix(
|
|
8367
|
+
failed, gh_ops, entry.repo_github, entry.target_branch,
|
|
8368
|
+
)
|
|
8286
8369
|
entry.error = msg
|
|
8287
8370
|
events.append(MergeEvent(entry, "checks_failed", msg))
|
|
8288
8371
|
continue # #292: skip, don't halt the group
|
|
@@ -433,6 +433,7 @@ def _fetch_manifest_data(
|
|
|
433
433
|
*,
|
|
434
434
|
issue_number: int | None = None,
|
|
435
435
|
roots: Iterable[str] | None = None,
|
|
436
|
+
root_out: "list[str] | None" = None,
|
|
436
437
|
):
|
|
437
438
|
"""*milestone_number*'s manifest data via *fetch* (a raw-content GitHub
|
|
438
439
|
fetch, no local checkout, no directory listing) — the legacy single-file
|
|
@@ -468,6 +469,16 @@ def _fetch_manifest_data(
|
|
|
468
469
|
unchanged from before #2896. Tries each root until one actually has a
|
|
469
470
|
legacy manifest and/or fragment file; a milestone's data lives under
|
|
470
471
|
exactly one, so the first root that produces anything wins.
|
|
472
|
+
|
|
473
|
+
*root_out* (#2166), when given, has the matched root dir appended —
|
|
474
|
+
the SAME root this data actually came from — so a caller rendering the
|
|
475
|
+
worker-briefing contract block (which needs to name a repo-relative
|
|
476
|
+
dirname in the text, e.g. ``tests/acceptance/ms-37/contract.md``) can
|
|
477
|
+
do so without a second, independent search. Appends the first
|
|
478
|
+
candidate root (or the legacy single-root default) when nothing
|
|
479
|
+
matched, mirroring the fall-through return below — there is no "right"
|
|
480
|
+
root to name for a slice that doesn't exist, so the caller must check
|
|
481
|
+
``has_slice``/``exempt`` before trusting this for message text.
|
|
471
482
|
"""
|
|
472
483
|
from coord import github_ops # noqa: PLC0415
|
|
473
484
|
from coord.acceptance import ( # noqa: PLC0415
|
|
@@ -511,6 +522,8 @@ def _fetch_manifest_data(
|
|
|
511
522
|
legacy, legacy_found = _fetch_one(f"{root_dir}/{ms_dir}", "manifest")
|
|
512
523
|
if issue_number is None:
|
|
513
524
|
if legacy_found:
|
|
525
|
+
if root_out is not None:
|
|
526
|
+
root_out.append(root_dir)
|
|
514
527
|
return legacy
|
|
515
528
|
continue
|
|
516
529
|
fragment, fragment_found = _fetch_one(
|
|
@@ -518,10 +531,14 @@ def _fetch_manifest_data(
|
|
|
518
531
|
str(issue_number),
|
|
519
532
|
)
|
|
520
533
|
if legacy_found or fragment_found:
|
|
534
|
+
if root_out is not None:
|
|
535
|
+
root_out.append(root_dir)
|
|
521
536
|
return merge_manifest_data(legacy, fragment)
|
|
522
537
|
|
|
523
538
|
# No root produced anything — degrade to empty data, same as the old
|
|
524
539
|
# single-root "not found" behaviour.
|
|
540
|
+
if root_out is not None:
|
|
541
|
+
root_out.append(search_roots[0])
|
|
525
542
|
return legacy if issue_number is None else merge_manifest_data(legacy, fragment)
|
|
526
543
|
|
|
527
544
|
|
|
@@ -714,6 +731,19 @@ class OracleReadiness:
|
|
|
714
731
|
#: gate doesn't apply. ``"approved"``/``"exempt"`` are the only values
|
|
715
732
|
#: that let ``reason`` be ``None``.
|
|
716
733
|
gate_a_state: str = ""
|
|
734
|
+
#: (#2166) The milestone this readiness verdict was computed against,
|
|
735
|
+
#: and the ``ms-NN`` directory name / repo-relative acceptance-root
|
|
736
|
+
#: dirname the slice (or exemption) it found actually lives under —
|
|
737
|
+
#: set whenever ``applies`` is ``True``. Exists so a caller that needs
|
|
738
|
+
#: to RENDER the worker-briefing contract block
|
|
739
|
+
#: (:func:`coord.acceptance.oracle_loop_contract_block_for_slice`) can
|
|
740
|
+
#: do so from THIS SAME verdict instead of re-deriving "does a slice
|
|
741
|
+
#: exist" from a second, independent read (previously a scan of the
|
|
742
|
+
#: dispatching host's local checkout, #2166's split-brain) — one
|
|
743
|
+
#: fetch, one source of truth, per #2096 "one question, one answer".
|
|
744
|
+
milestone_number: int | None = None
|
|
745
|
+
ms_dir: str = ""
|
|
746
|
+
acceptance_dirname: str = ""
|
|
717
747
|
|
|
718
748
|
|
|
719
749
|
def _gate_a_exempt_trade_off_note(
|
|
@@ -857,14 +887,27 @@ def issue_oracle_ready(
|
|
|
857
887
|
from coord.acceptance import test_ids_for_issue # noqa: PLC0415
|
|
858
888
|
from coord.acceptance_drivers import SUPPORTED_KINDS # noqa: PLC0415
|
|
859
889
|
|
|
890
|
+
# #2166: capture WHICH search root this issue's manifest data actually
|
|
891
|
+
# came from, so the verdict below can carry enough to let a caller
|
|
892
|
+
# render the worker-briefing contract block from THIS read — the same
|
|
893
|
+
# `gh`-fetched-from-the-default-branch source the gate itself just
|
|
894
|
+
# used — instead of a second, independent local-checkout scan that can
|
|
895
|
+
# silently disagree with it (the #2166 split-brain).
|
|
896
|
+
matched_roots: list[str] = []
|
|
860
897
|
manifest = _fetch_manifest_data(
|
|
861
898
|
repo_cfg.github, milestone_number, repo_cfg.default_branch, fetch,
|
|
862
899
|
issue_number=issue_number,
|
|
863
900
|
roots=config.acceptance.acceptance_search_roots(repo_cfg.name),
|
|
901
|
+
root_out=matched_roots,
|
|
864
902
|
)
|
|
865
903
|
has_slice = bool(test_ids_for_issue(manifest.tests, issue_number))
|
|
866
904
|
exempt = issue_number in manifest.exempt or "oracle:exempt" in set(issue_labels)
|
|
867
905
|
|
|
906
|
+
from coord.acceptance import ACCEPTANCE_DIRNAME, ms_dirname # noqa: PLC0415
|
|
907
|
+
|
|
908
|
+
ms_dir = ms_dirname(milestone_number)
|
|
909
|
+
acceptance_dirname = matched_roots[0] if matched_roots else ACCEPTANCE_DIRNAME
|
|
910
|
+
|
|
868
911
|
entry = config.acceptance.drivers.get(repo_cfg.name)
|
|
869
912
|
unsupported = _unsupported_driver_kinds(entry) if entry is not None else ()
|
|
870
913
|
|
|
@@ -887,13 +930,16 @@ def issue_oracle_ready(
|
|
|
887
930
|
return OracleReadiness(
|
|
888
931
|
applies=True, exempt=exempt, has_slice=has_slice,
|
|
889
932
|
unsupported_kinds=unsupported, reason=signoff.reason,
|
|
890
|
-
gate_a_state=signoff.state,
|
|
933
|
+
gate_a_state=signoff.state, milestone_number=milestone_number,
|
|
934
|
+
ms_dir=ms_dir, acceptance_dirname=acceptance_dirname,
|
|
891
935
|
)
|
|
892
936
|
|
|
893
937
|
if exempt:
|
|
894
938
|
return OracleReadiness(
|
|
895
939
|
applies=True, exempt=True, has_slice=has_slice,
|
|
896
940
|
unsupported_kinds=unsupported, gate_a_state=signoff.state,
|
|
941
|
+
milestone_number=milestone_number, ms_dir=ms_dir,
|
|
942
|
+
acceptance_dirname=acceptance_dirname,
|
|
897
943
|
)
|
|
898
944
|
|
|
899
945
|
reason: str | None = None
|
|
@@ -920,7 +966,8 @@ def issue_oracle_ready(
|
|
|
920
966
|
return OracleReadiness(
|
|
921
967
|
applies=True, exempt=False, has_slice=has_slice,
|
|
922
968
|
unsupported_kinds=unsupported, reason=reason,
|
|
923
|
-
gate_a_state=signoff.state,
|
|
969
|
+
gate_a_state=signoff.state, milestone_number=milestone_number,
|
|
970
|
+
ms_dir=ms_dir, acceptance_dirname=acceptance_dirname,
|
|
924
971
|
)
|
|
925
972
|
|
|
926
973
|
|
|
@@ -1304,3 +1304,33 @@ def _no_frozen_coord_dir_constants():
|
|
|
1304
1304
|
_scrub_lazy_coord_dir_constants()
|
|
1305
1305
|
yield
|
|
1306
1306
|
_scrub_lazy_coord_dir_constants()
|
|
1307
|
+
|
|
1308
|
+
|
|
1309
|
+
@pytest.fixture(autouse=True)
|
|
1310
|
+
def _non_wsl_host_by_default(monkeypatch):
|
|
1311
|
+
"""#3532: ``coord.win_native_bridge.is_wsl_host`` detects the REAL host
|
|
1312
|
+
it's running on (``WSL_DISTRO_NAME``/``/proc/version``) — fine for
|
|
1313
|
+
production, but it means every ``win-native`` acceptance-driver test
|
|
1314
|
+
that doesn't scripts its own ``run_native_spec``/bridge fake implicitly
|
|
1315
|
+
assumed "whatever machine runs this test suite is not WSL". That held
|
|
1316
|
+
for every machine except dell64 (a genuine WSL2 host with a working
|
|
1317
|
+
Windows-side Python, #3519): there, ``is_wsl_host()`` legitimately
|
|
1318
|
+
returns ``True`` and ``coord.acceptance_drivers._run_win_native`` takes
|
|
1319
|
+
the real WSL->Windows bridge path instead of the scripted fake these
|
|
1320
|
+
tests set up on ``coord.win_native_driver.run_native_spec`` — a
|
|
1321
|
+
baseline-red latch (#3386), not a test bug in the assertions themselves.
|
|
1322
|
+
|
|
1323
|
+
Forcing the DEFAULT to non-WSL here, once, is the same "one question,
|
|
1324
|
+
one answer" posture as this file's other ``_no_real_*``/``_no_live_*``
|
|
1325
|
+
fixtures: every test in the suite gets a hermetic answer to "is this
|
|
1326
|
+
host WSL" regardless of which machine actually runs it. A test that
|
|
1327
|
+
means to exercise the WSL/bridge branch (``TestRunDriverWinNativeWslBridge``
|
|
1328
|
+
in ``tests/test_acceptance_drivers.py``) monkeypatches
|
|
1329
|
+
``win_native_bridge.is_wsl_host`` back to ``True`` itself, inside the
|
|
1330
|
+
test body — that call reuses this same function-scoped ``monkeypatch``
|
|
1331
|
+
fixture and so simply wins (last ``setattr`` on the same attribute),
|
|
1332
|
+
no ordering trick needed.
|
|
1333
|
+
"""
|
|
1334
|
+
import coord.win_native_bridge as win_native_bridge
|
|
1335
|
+
|
|
1336
|
+
monkeypatch.setattr(win_native_bridge, "is_wsl_host", lambda: False)
|
|
@@ -48,6 +48,7 @@ from coord.acceptance import (
|
|
|
48
48
|
ms_dir_for_exempt_issue,
|
|
49
49
|
ms_dir_for_issue,
|
|
50
50
|
oracle_loop_contract_block,
|
|
51
|
+
oracle_loop_contract_block_for_slice,
|
|
51
52
|
oracle_loop_contract_reviewer_note,
|
|
52
53
|
parse_manifest_text,
|
|
53
54
|
resolve_for_path,
|
|
@@ -1467,6 +1468,63 @@ class TestOracleLoopContractBlock:
|
|
|
1467
1468
|
assert "`tests/acceptance/" not in block
|
|
1468
1469
|
|
|
1469
1470
|
|
|
1471
|
+
class TestOracleLoopContractBlockForSlice:
|
|
1472
|
+
"""(#2166) :func:`oracle_loop_contract_block_for_slice` renders the
|
|
1473
|
+
exact same text :func:`oracle_loop_contract_block` does, but from an
|
|
1474
|
+
already-resolved verdict (no local checkout) — the version
|
|
1475
|
+
`coord.dispatch.dispatch` now uses so the worker-briefing block can
|
|
1476
|
+
never drift from the #1138 gate's own read."""
|
|
1477
|
+
|
|
1478
|
+
def test_empty_when_ms_dir_missing(self) -> None:
|
|
1479
|
+
# OracleReadiness.applies == False (e.g. no milestone) -> ms_dir
|
|
1480
|
+
# is "" -> nothing to render, same as oracle_loop_contract_block's
|
|
1481
|
+
# "no manifest found" case.
|
|
1482
|
+
assert oracle_loop_contract_block_for_slice(
|
|
1483
|
+
"api", 945, has_slice=False, exempt=False, ms_dir="",
|
|
1484
|
+
) == ""
|
|
1485
|
+
|
|
1486
|
+
def test_empty_when_neither_slice_nor_exempt(self) -> None:
|
|
1487
|
+
# A milestone resolved (ms_dir set) but this issue has no slice and
|
|
1488
|
+
# isn't exempted — the #1138 gate's own "no acceptance slice yet"
|
|
1489
|
+
# refusal covers this case; nothing to point the worker at.
|
|
1490
|
+
assert oracle_loop_contract_block_for_slice(
|
|
1491
|
+
"api", 945, has_slice=False, exempt=False, ms_dir="ms-25",
|
|
1492
|
+
) == ""
|
|
1493
|
+
|
|
1494
|
+
def test_renders_same_text_as_the_local_checkout_scan(
|
|
1495
|
+
self, tmp_path: Path,
|
|
1496
|
+
) -> None:
|
|
1497
|
+
root = tmp_path / "tests" / "acceptance"
|
|
1498
|
+
(root / "ms25").mkdir(parents=True)
|
|
1499
|
+
(root / "ms25" / "manifest.yml").write_text("tests:\n ms25::a: 945\n")
|
|
1500
|
+
from_disk = oracle_loop_contract_block(root, "api", 945)
|
|
1501
|
+
from_verdict = oracle_loop_contract_block_for_slice(
|
|
1502
|
+
"api", 945, has_slice=True, exempt=False, ms_dir="ms25",
|
|
1503
|
+
acceptance_dirname=ACCEPTANCE_DIRNAME,
|
|
1504
|
+
)
|
|
1505
|
+
assert from_disk == from_verdict
|
|
1506
|
+
assert "coord acceptance run --repo api --issue 945" in from_verdict
|
|
1507
|
+
|
|
1508
|
+
def test_renders_the_exempt_variant(self) -> None:
|
|
1509
|
+
block = oracle_loop_contract_block_for_slice(
|
|
1510
|
+
"api", 1125, has_slice=False, exempt=True, ms_dir="ms-37",
|
|
1511
|
+
acceptance_dirname="tests/acceptance",
|
|
1512
|
+
)
|
|
1513
|
+
assert "(exempted issue, #3212)" in block
|
|
1514
|
+
assert "tests/acceptance/ms-37/contract.md" in block
|
|
1515
|
+
# The exempted variant deliberately drops the "run coord
|
|
1516
|
+
# acceptance run" instruction (there is no slice of its own).
|
|
1517
|
+
assert "coord acceptance run" not in block
|
|
1518
|
+
|
|
1519
|
+
def test_acceptance_dirname_names_a_relocated_slice(self) -> None:
|
|
1520
|
+
block = oracle_loop_contract_block_for_slice(
|
|
1521
|
+
"coord-tui", 2282, has_slice=True, exempt=False, ms_dir="ms-65",
|
|
1522
|
+
acceptance_dirname="tui/tests/acceptance/",
|
|
1523
|
+
)
|
|
1524
|
+
assert "tui/tests/acceptance/ms-65/contract.md" in block
|
|
1525
|
+
assert "`tests/acceptance/" not in block
|
|
1526
|
+
|
|
1527
|
+
|
|
1470
1528
|
class TestMsDirForExemptIssue:
|
|
1471
1529
|
"""#3212: sibling to ms_dir_for_issue, but for an issue named in a
|
|
1472
1530
|
manifest's `exempt:` list rather than one with a test mapping."""
|