code-coordinator 0.5.559__tar.gz → 0.5.561__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.559 → code_coordinator-0.5.561}/PKG-INFO +1 -1
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/ci_store.py +12 -5
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/drive.py +38 -12
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/merge_queue.py +91 -8
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/conftest.py +30 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_acceptance_drivers.py +26 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive.py +46 -4
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_queue.py +21 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_install_agent_wsl_bridge_3515.py +30 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_merge_queue.py +128 -2
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_throwaway_vm.py +29 -4
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/.gitignore +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/CLAUDE.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/GOAL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/LICENSE +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/MANIFEST.in +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/README.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/__init__.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/agent.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/audit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/backup.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/block_log.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/board_service.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/brain.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/claim.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/cli.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/client.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/codegen.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/comments.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/config.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dao.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/db.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/deps.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/events.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/filelock.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/freshness.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/gates.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/goal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/context.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/models.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/render.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/health/units.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/hooks.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/interactive.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/models.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/network.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/notify.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/openapi.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/parentage.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/plans.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/progress.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/release_window.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/reports.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/review.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/self_health.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/smoke.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/split_work.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/sql.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/state.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/test_author.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/test_report.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/usage.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/install-agent.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/pyproject.toml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/setup.cfg +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/__init__.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/backends.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_client.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_config.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_db.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_events.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_init.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_models.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_network.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_review.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_session.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_split.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_state.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/write_parity.py +0 -0
|
@@ -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
|
|
@@ -1006,16 +1006,19 @@ class OracleDecision:
|
|
|
1006
1006
|
— the argument :func:`_decide_acceptance_author` needs to build ``coord
|
|
1007
1007
|
acceptance author <repo> <tracking_issue> --issue <N>``.
|
|
1008
1008
|
|
|
1009
|
-
#2199: ``issue_exempt`` — resolved alongside ``active`` (same
|
|
1010
|
-
GitHub fetch budget: ``AcceptanceGateChecker.is_issue_exempt``
|
|
1011
|
-
#1138 hard gate's own manifest read) — is *this issue*'s
|
|
1012
|
-
``manifest.exempt``/``oracle:exempt`` opt-out from the sealed suite.
|
|
1013
|
-
:func:`
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1009
|
+
#2199/#2171: ``issue_exempt`` — resolved alongside ``active`` (same
|
|
1010
|
+
one-shot GitHub fetch budget: ``AcceptanceGateChecker.is_issue_exempt``
|
|
1011
|
+
reuses the #1138 hard gate's own manifest read) — is *this issue*'s
|
|
1012
|
+
``manifest.exempt``/``oracle:exempt`` opt-out from the sealed suite. An
|
|
1013
|
+
exempt issue makes :func:`resolve_oracle_decision` return ``active=False``
|
|
1014
|
+
(#2171 — it has no slice for a `test-author` session to write, so
|
|
1015
|
+
JIT-authoring must not run either), with ``issue_exempt=True`` and
|
|
1016
|
+
``reason`` naming the exemption for the preflight banner. ``True`` only
|
|
1017
|
+
ever coincides with ``active=False`` by construction; kept as its own
|
|
1018
|
+
field (rather than inferred from ``reason``) so
|
|
1019
|
+
:func:`_decide_acceptance_gate` and :func:`_dispatch_work_stage` can
|
|
1020
|
+
check it directly and defensively, without parsing prose. ``False``
|
|
1021
|
+
when the issue is not exempt, whatever ``active`` is.
|
|
1019
1022
|
"""
|
|
1020
1023
|
|
|
1021
1024
|
active: bool
|
|
@@ -1094,6 +1097,24 @@ def resolve_oracle_decision(
|
|
|
1094
1097
|
issue_exempt = gate_checker.is_issue_exempt(
|
|
1095
1098
|
state.repo, state.milestone_number, state.issue, state.issue_labels,
|
|
1096
1099
|
)
|
|
1100
|
+
if issue_exempt:
|
|
1101
|
+
# #2171: an issue in `manifest.exempt`/labelled `oracle:exempt` has
|
|
1102
|
+
# no sealed slice for a `type="test-author"` session to write — the
|
|
1103
|
+
# #1138 hard gate (`issue_oracle_ready`) would never block its Work
|
|
1104
|
+
# dispatch on one either. Returning INACTIVE here (not just setting
|
|
1105
|
+
# `issue_exempt=True` on an active decision) means BOTH downstream
|
|
1106
|
+
# gates fall through to a normal drive: `_dispatch_work_stage`
|
|
1107
|
+
# dispatches Work directly instead of authoring first, and
|
|
1108
|
+
# `_decide_acceptance_gate`'s trust gate never fires. Before this,
|
|
1109
|
+
# `active` stayed True for an exempt issue, so the JIT-authoring
|
|
1110
|
+
# step ran anyway — burning a metered dispatch for guaranteed-zero
|
|
1111
|
+
# output and then dead-ending with nothing left to dispatch Work.
|
|
1112
|
+
return OracleDecision(
|
|
1113
|
+
False,
|
|
1114
|
+
f"#{state.issue} is exempt in ms-{state.milestone_number}'s "
|
|
1115
|
+
"manifest — normal drive",
|
|
1116
|
+
issue_exempt=True,
|
|
1117
|
+
)
|
|
1097
1118
|
return OracleDecision(
|
|
1098
1119
|
True,
|
|
1099
1120
|
f"ORACLE DRIVE — ms-{state.milestone_number}'s Gate-A contract is "
|
|
@@ -1102,7 +1123,6 @@ def resolve_oracle_decision(
|
|
|
1102
1123
|
f"{state.milestone_tracking_issue} --issue {state.issue}`) before "
|
|
1103
1124
|
"dispatching work",
|
|
1104
1125
|
tracking_issue=state.milestone_tracking_issue,
|
|
1105
|
-
issue_exempt=issue_exempt,
|
|
1106
1126
|
)
|
|
1107
1127
|
|
|
1108
1128
|
|
|
@@ -2997,7 +3017,13 @@ def _dispatch_work_stage(
|
|
|
2997
3017
|
*counters* is threaded in for the slice's own merge budget (#2079 —
|
|
2998
3018
|
``DriveCounters.acceptance``); every other decision here is stateless.
|
|
2999
3019
|
"""
|
|
3000
|
-
if oracle is not None and oracle.active:
|
|
3020
|
+
if oracle is not None and oracle.active and not oracle.issue_exempt:
|
|
3021
|
+
# #2171: `oracle.active` alone already excludes an exempt issue
|
|
3022
|
+
# (`resolve_oracle_decision` returns `active=False` for one) — the
|
|
3023
|
+
# explicit `not oracle.issue_exempt` here is belt-and-suspenders,
|
|
3024
|
+
# mirroring `_decide_acceptance_gate`'s own guard below, so this
|
|
3025
|
+
# call site asks the SAME direct question rather than relying on
|
|
3026
|
+
# `active`'s meaning to carry it transitively.
|
|
3001
3027
|
assert gate_checker is not None and verifier is not None, (
|
|
3002
3028
|
"oracle.active implies resolve_oracle_decision ran with a real "
|
|
3003
3029
|
"gate_checker; decide()/Driver always thread one through"
|
|
@@ -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
|
|
@@ -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)
|
|
@@ -1699,6 +1699,32 @@ class TestRunDriverWinNativeWslBridge:
|
|
|
1699
1699
|
result = run_driver("win-native", "./vimcode.exe", cwd=str(tmp_path), entrypoint="native.yaml")
|
|
1700
1700
|
assert result.exit_code == 0
|
|
1701
1701
|
|
|
1702
|
+
def test_hermetic_default_beats_a_real_looking_wsl_environ(self, tmp_path, monkeypatch) -> None:
|
|
1703
|
+
"""#3532: dell64 is a genuine WSL host, so ``conftest.py``'s
|
|
1704
|
+
``_non_wsl_host_by_default`` autouse fixture must win over
|
|
1705
|
+
``is_wsl_host``'s OWN detection inputs outright — not merely happen
|
|
1706
|
+
to agree with them because the box running this particular test
|
|
1707
|
+
suite isn't WSL. Forcing ``WSL_DISTRO_NAME`` (the stronger of
|
|
1708
|
+
``is_wsl_host``'s two signals, and the one WSL sets for every
|
|
1709
|
+
interactive/non-interactive shell alike) to look exactly like
|
|
1710
|
+
dell64, and confirming the in-process (non-bridge) path still runs,
|
|
1711
|
+
proves the fixture actually overrides the real signal rather than
|
|
1712
|
+
coincidentally matching a non-WSL test runner."""
|
|
1713
|
+
monkeypatch.setenv("WSL_DISTRO_NAME", "Ubuntu")
|
|
1714
|
+
|
|
1715
|
+
spec = tmp_path / "native.yaml"
|
|
1716
|
+
spec.write_text("steps:\n - type: launch\n")
|
|
1717
|
+
|
|
1718
|
+
import coord.win_native_driver as win_native_driver
|
|
1719
|
+
|
|
1720
|
+
def fake_run_native_spec(spec_text, *, launch_command, cwd, timeout=None):
|
|
1721
|
+
return [{"id": "000 launch", "status": "pass", "message": ""}]
|
|
1722
|
+
|
|
1723
|
+
monkeypatch.setattr(win_native_driver, "run_native_spec", fake_run_native_spec)
|
|
1724
|
+
|
|
1725
|
+
result = run_driver("win-native", "./vimcode.exe", cwd=str(tmp_path), entrypoint="native.yaml")
|
|
1726
|
+
assert result.exit_code == 0
|
|
1727
|
+
|
|
1702
1728
|
|
|
1703
1729
|
class TestRunDriverMacNative:
|
|
1704
1730
|
"""#3485: the ``mac-native`` driver — the actual Quartz/AX calls, the
|
|
@@ -654,9 +654,14 @@ def test_resolve_oracle_decision_is_active_when_everything_lines_up():
|
|
|
654
654
|
assert "ms-38" in decision.reason
|
|
655
655
|
|
|
656
656
|
|
|
657
|
-
def
|
|
658
|
-
"""#
|
|
659
|
-
|
|
657
|
+
def test_resolve_oracle_decision_is_inactive_for_an_exempt_issue():
|
|
658
|
+
"""#2171: an issue in `manifest.exempt` (or labelled `oracle:exempt`)
|
|
659
|
+
has no sealed slice for a `type="test-author"` session to write — the
|
|
660
|
+
same #1138 hard gate (`issue_oracle_ready`) would never block its Work
|
|
661
|
+
dispatch on one either. `resolve_oracle_decision` must say so with
|
|
662
|
+
`active=False` (not merely flag `issue_exempt=True` on an otherwise
|
|
663
|
+
active decision) so `_dispatch_work_stage` dispatches Work directly
|
|
664
|
+
instead of dead-ending on a test-author with nothing to author."""
|
|
660
665
|
checker = FakeGateChecker(exists=True, exempt=True)
|
|
661
666
|
decision = resolve_oracle_decision(
|
|
662
667
|
oracle_state(issue_labels=("bug",)),
|
|
@@ -664,8 +669,10 @@ def test_resolve_oracle_decision_resolves_issue_exempt_when_active():
|
|
|
664
669
|
make_config_with_acceptance_driver(),
|
|
665
670
|
checker,
|
|
666
671
|
)
|
|
667
|
-
assert decision.active is
|
|
672
|
+
assert decision.active is False
|
|
668
673
|
assert decision.issue_exempt is True
|
|
674
|
+
assert "exempt" in decision.reason
|
|
675
|
+
assert "ms-38" in decision.reason
|
|
669
676
|
assert checker.exempt_calls == [(REPO, 38, ISSUE, ("bug",))]
|
|
670
677
|
|
|
671
678
|
|
|
@@ -871,6 +878,41 @@ def test_oracle_inactive_dispatches_work_directly_as_before():
|
|
|
871
878
|
)
|
|
872
879
|
|
|
873
880
|
|
|
881
|
+
def test_oracle_exempt_issue_dispatches_work_directly_no_test_author():
|
|
882
|
+
"""#2171: `resolve_oracle_decision` returns `active=False` for an exempt
|
|
883
|
+
issue (see the regression test above), so `_dispatch_work_stage` must
|
|
884
|
+
skip the JIT-authoring branch entirely and dispatch Work straight away
|
|
885
|
+
— never a `coord acceptance author ...` for an issue with nothing to
|
|
886
|
+
author."""
|
|
887
|
+
oracle = OracleDecision(
|
|
888
|
+
False,
|
|
889
|
+
"#1392 is exempt in ms-38's manifest — normal drive",
|
|
890
|
+
issue_exempt=True,
|
|
891
|
+
)
|
|
892
|
+
action = step(state(), oracle=oracle)
|
|
893
|
+
assert action.kind == RUN
|
|
894
|
+
assert action.command == (
|
|
895
|
+
"assign", "precision", REPO, "1392",
|
|
896
|
+
"--driven-by", f"drive:{REPO}#1392",
|
|
897
|
+
)
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
def test_dispatch_work_stage_also_guards_on_issue_exempt_defensively():
|
|
901
|
+
"""Belt-and-suspenders (mirrors `_decide_acceptance_gate`'s own guard):
|
|
902
|
+
even if something ever constructed an `active=True, issue_exempt=True`
|
|
903
|
+
decision, the work-stage dispatch must still skip authoring rather than
|
|
904
|
+
trust `active` alone."""
|
|
905
|
+
oracle = OracleDecision(
|
|
906
|
+
True, "ORACLE DRIVE", tracking_issue=1120, issue_exempt=True,
|
|
907
|
+
)
|
|
908
|
+
action = step(state(), oracle=oracle)
|
|
909
|
+
assert action.kind == RUN
|
|
910
|
+
assert action.command == (
|
|
911
|
+
"assign", "precision", REPO, "1392",
|
|
912
|
+
"--driven-by", f"drive:{REPO}#1392",
|
|
913
|
+
)
|
|
914
|
+
|
|
915
|
+
|
|
874
916
|
def test_oracle_active_authors_the_slice_before_dispatching_work():
|
|
875
917
|
oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
|
|
876
918
|
action = step(state(), oracle=oracle)
|
|
@@ -7364,6 +7364,27 @@ def test_merge_gate_remedy_command_falls_back_to_inspect_for_red_ci():
|
|
|
7364
7364
|
assert "drive-queue remove" not in command
|
|
7365
7365
|
|
|
7366
7366
|
|
|
7367
|
+
def test_merge_gate_remedy_command_recognizes_a_stale_checks_failed_reason():
|
|
7368
|
+
"""#1986: a RED check that predates the current base still carries the
|
|
7369
|
+
plain `checks failed` prefix (`coord/merge_queue.py`'s
|
|
7370
|
+
`checks_failed_stale_suffix` only ever APPENDS to it) — so this must
|
|
7371
|
+
keep matching here exactly as the bare #2983-less red-CI shape does
|
|
7372
|
+
above, not fall through to "not a merge-gate block" just because the
|
|
7373
|
+
message now also names the stale base."""
|
|
7374
|
+
reason = (
|
|
7375
|
+
"checks failed: windows (failure) — but that run predates the "
|
|
7376
|
+
"current base (ran against main as of 2026-08-07T03:33:48Z, main "
|
|
7377
|
+
"now 2026-08-08T01:02:03Z) — rebase onto main and push (`git push "
|
|
7378
|
+
"--force-with-lease`) and let CI re-run before trusting this "
|
|
7379
|
+
"result; a CI re-run against the same base cannot see a moved base"
|
|
7380
|
+
)
|
|
7381
|
+
assert is_merge_gate_block_reason(reason) is True
|
|
7382
|
+
command = merge_gate_remedy_command(reason, REPO, 1986)
|
|
7383
|
+
assert command == merge_plan_inspect_command(REPO)
|
|
7384
|
+
assert "revalidate" not in command
|
|
7385
|
+
assert "drive-queue remove" not in command
|
|
7386
|
+
|
|
7387
|
+
|
|
7367
7388
|
def test_merge_gate_remedy_command_falls_back_to_inspect_for_review_required():
|
|
7368
7389
|
reason = (
|
|
7369
7390
|
"review_required — coord merge's own gate reports 'review missing', "
|
{code_coordinator-0.5.559 → code_coordinator-0.5.561}/tests/test_install_agent_wsl_bridge_3515.py
RENAMED
|
@@ -73,9 +73,33 @@ exit 1
|
|
|
73
73
|
_write_exe(fake_bin / "systemctl", "#!/usr/bin/env bash\nexit 0\n")
|
|
74
74
|
for noop in ("loginctl", "claude"):
|
|
75
75
|
_write_exe(fake_bin / noop, "#!/usr/bin/env bash\nexit 0\n")
|
|
76
|
+
_write_exe(fake_bin / "grep", _GREP_STUB)
|
|
76
77
|
return fake_bin
|
|
77
78
|
|
|
78
79
|
|
|
80
|
+
#: #3532: `install-agent.sh`'s WSL-detection fallback is literally
|
|
81
|
+
#: `grep -qi microsoft /proc/version` (consulted only when `WSL_DISTRO_NAME`
|
|
82
|
+
#: is unset) — run for real, that reads the actual host's `/proc/version`,
|
|
83
|
+
#: which says "microsoft" on a genuine WSL2 host (dell64) regardless of
|
|
84
|
+
#: which branch THIS test means to exercise. Intercepting exactly that one
|
|
85
|
+
#: invocation and answering from `$COORD_TEST_PROC_VERSION_IS_WSL` (set by
|
|
86
|
+
#: `_run_installer` below, from the same `wsl=` flag the test author
|
|
87
|
+
#: already passed) makes the installer's WSL detection hermetic the same
|
|
88
|
+
#: way `tests/conftest.py`'s `_non_wsl_host_by_default` does for the Python
|
|
89
|
+
#: driver path — every OTHER `grep` call (e.g. the `python3 --version`
|
|
90
|
+
#: compatibility check) is forwarded to the real binary unchanged.
|
|
91
|
+
_GREP_STUB = """#!/usr/bin/env bash
|
|
92
|
+
if [ "$1" = "-qi" ] && [ "$2" = "microsoft" ] && [ "$3" = "/proc/version" ]; then
|
|
93
|
+
if [ "${COORD_TEST_PROC_VERSION_IS_WSL:-0}" = "1" ]; then
|
|
94
|
+
exit 0
|
|
95
|
+
else
|
|
96
|
+
exit 1
|
|
97
|
+
fi
|
|
98
|
+
fi
|
|
99
|
+
exec /usr/bin/grep "$@"
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
|
|
79
103
|
def _bridge_log(tmp_path: Path) -> Path:
|
|
80
104
|
return tmp_path / "home" / "bridge-ensure.log"
|
|
81
105
|
|
|
@@ -111,6 +135,12 @@ def _run_installer(
|
|
|
111
135
|
env["WSL_DISTRO_NAME"] = "Ubuntu"
|
|
112
136
|
else:
|
|
113
137
|
env.pop("WSL_DISTRO_NAME", None)
|
|
138
|
+
# #3532: back the installer's `/proc/version` fallback check with the
|
|
139
|
+
# same `wsl=` flag, via the `grep` stub in `_make_fake_bin`, instead of
|
|
140
|
+
# leaving it to read the REAL host's `/proc/version` — a genuine WSL2
|
|
141
|
+
# host (dell64) would otherwise always win that check regardless of
|
|
142
|
+
# what `WSL_DISTRO_NAME` above says.
|
|
143
|
+
env["COORD_TEST_PROC_VERSION_IS_WSL"] = "1" if wsl else "0"
|
|
114
144
|
return subprocess.run(
|
|
115
145
|
[POSIX_BASH, str(INSTALLER), "--machine", "testhost", *extra_args],
|
|
116
146
|
cwd=tmp_path,
|
|
@@ -44,14 +44,20 @@ def _check(
|
|
|
44
44
|
status: str = "completed",
|
|
45
45
|
conclusion: str | None = "failure",
|
|
46
46
|
run_id: str = "1",
|
|
47
|
+
started_at: float | None = None,
|
|
47
48
|
) -> CheckRun:
|
|
48
49
|
"""#1892 test helper: a `CheckRun` with a settable `run_id`, needed to
|
|
49
50
|
exercise `_ci_infra_reason`'s per-run job lookup — mirrors
|
|
50
|
-
`tests/test_ci_store.py`'s `_check`, which has no `run_id` parameter.
|
|
51
|
+
`tests/test_ci_store.py`'s `_check`, which has no `run_id` parameter.
|
|
52
|
+
|
|
53
|
+
`started_at` (#1986) lets a caller position the run before/after a
|
|
54
|
+
fake base timestamp, to exercise the `checks_failed` staleness wording
|
|
55
|
+
— defaults to `None` (unreadable anchor) exactly like every pre-#1986
|
|
56
|
+
caller of this helper, so none of them need updating."""
|
|
51
57
|
return CheckRun(
|
|
52
58
|
name=name, status=status, conclusion=conclusion,
|
|
53
59
|
url=f"https://gh/runs/{run_id}", run_id=run_id,
|
|
54
|
-
started_at=
|
|
60
|
+
started_at=started_at, completed_at=None,
|
|
55
61
|
)
|
|
56
62
|
|
|
57
63
|
|
|
@@ -9590,6 +9596,126 @@ class TestTwoGreenBranchesOneBaseMove:
|
|
|
9590
9596
|
assert gh.ts_calls == 1 # the gate's own read, and nothing more
|
|
9591
9597
|
|
|
9592
9598
|
|
|
9599
|
+
class TestChecksFailedStaleness:
|
|
9600
|
+
"""#1986: a FAILING check can be exactly as stale as a #1851 PASSING
|
|
9601
|
+
one — this issue's live incident (#1895) was a `windows` check red for
|
|
9602
|
+
`fcntl` import failure that #1156 had already fixed on `main`, 33
|
|
9603
|
+
commits before this branch's base. Unlike a stale pass (reported with
|
|
9604
|
+
full provenance since #1851), a stale failure used to be reported as a
|
|
9605
|
+
bare, current-looking defect, inviting either pointless debugging of a
|
|
9606
|
+
bug that no longer exists, or a wrong `--force-merge`.
|
|
9607
|
+
|
|
9608
|
+
Acceptance: the refusal still BLOCKS either way — only the message
|
|
9609
|
+
changes, never the decision — and a CURRENT failing check must be
|
|
9610
|
+
reported exactly as before (no staleness wording), so the signal stays
|
|
9611
|
+
meaningful."""
|
|
9612
|
+
|
|
9613
|
+
class _Gh(FakeGh):
|
|
9614
|
+
ts: float = 1000.0
|
|
9615
|
+
def get_branch_commit_timestamp(self, repo, branch):
|
|
9616
|
+
return self.ts
|
|
9617
|
+
|
|
9618
|
+
@staticmethod
|
|
9619
|
+
def _ci(failed_started_at: float | None):
|
|
9620
|
+
class _Ci:
|
|
9621
|
+
is_available = True
|
|
9622
|
+
def list_checks_for_pr(self, repo, number):
|
|
9623
|
+
return [_check("windows", started_at=failed_started_at)]
|
|
9624
|
+
return _Ci()
|
|
9625
|
+
|
|
9626
|
+
def test_stale_failure_names_both_anchors_and_still_blocks(self) -> None:
|
|
9627
|
+
items = [_q("w1", pr=99)]
|
|
9628
|
+
gh = self._Gh()
|
|
9629
|
+
events = process(items, gh, ci_store=self._ci(failed_started_at=500.0))
|
|
9630
|
+
|
|
9631
|
+
assert items[0].state == PENDING # still blocks
|
|
9632
|
+
kinds = [e.kind for e in events]
|
|
9633
|
+
assert "checks_failed" in kinds
|
|
9634
|
+
failed = [e for e in events if e.kind == "checks_failed"][0]
|
|
9635
|
+
assert failed.message.startswith("checks failed:") # #2212: drive_queue matches on this
|
|
9636
|
+
assert "predates the current base" in failed.message
|
|
9637
|
+
assert "rebase" in failed.message
|
|
9638
|
+
assert items[0].error == failed.message
|
|
9639
|
+
|
|
9640
|
+
def test_current_failure_has_no_staleness_wording(self) -> None:
|
|
9641
|
+
items = [_q("w1", pr=99)]
|
|
9642
|
+
gh = self._Gh()
|
|
9643
|
+
events = process(items, gh, ci_store=self._ci(failed_started_at=1500.0))
|
|
9644
|
+
|
|
9645
|
+
assert items[0].state == PENDING # still blocks
|
|
9646
|
+
failed = [e for e in events if e.kind == "checks_failed"][0]
|
|
9647
|
+
assert failed.message == "checks failed: windows (failure)"
|
|
9648
|
+
assert "predates the current base" not in failed.message
|
|
9649
|
+
assert "stale" not in failed.message.lower()
|
|
9650
|
+
|
|
9651
|
+
def test_stale_and_current_failure_reasons_differ(self) -> None:
|
|
9652
|
+
"""Acceptance criterion: the two reason strings must differ."""
|
|
9653
|
+
stale_items = [_q("w1", pr=99)]
|
|
9654
|
+
stale_events = process(
|
|
9655
|
+
stale_items, self._Gh(), ci_store=self._ci(failed_started_at=500.0),
|
|
9656
|
+
)
|
|
9657
|
+
current_items = [_q("w2", pr=100)]
|
|
9658
|
+
current_events = process(
|
|
9659
|
+
current_items, self._Gh(), ci_store=self._ci(failed_started_at=1500.0),
|
|
9660
|
+
)
|
|
9661
|
+
stale_msg = [e for e in stale_events if e.kind == "checks_failed"][0].message
|
|
9662
|
+
current_msg = [e for e in current_events if e.kind == "checks_failed"][0].message
|
|
9663
|
+
assert stale_msg != current_msg
|
|
9664
|
+
# Both share the same prefix — only the provenance differs.
|
|
9665
|
+
assert stale_msg.startswith("checks failed: windows (failure)")
|
|
9666
|
+
assert current_msg == "checks failed: windows (failure)"
|
|
9667
|
+
|
|
9668
|
+
def test_dry_run_previews_the_same_staleness_wording(self) -> None:
|
|
9669
|
+
items = [_q("w1", pr=99)]
|
|
9670
|
+
gh = self._Gh()
|
|
9671
|
+
events = process(
|
|
9672
|
+
items, gh, ci_store=self._ci(failed_started_at=500.0), dry_run=True,
|
|
9673
|
+
)
|
|
9674
|
+
assert items[0].state == PENDING
|
|
9675
|
+
failed = [e for e in events if e.kind == "checks_failed"][0]
|
|
9676
|
+
assert "would be blocked: checks failed:" in failed.message
|
|
9677
|
+
assert "predates the current base" in failed.message
|
|
9678
|
+
|
|
9679
|
+
def test_dry_run_current_failure_has_no_staleness_wording(self) -> None:
|
|
9680
|
+
items = [_q("w1", pr=99)]
|
|
9681
|
+
gh = self._Gh()
|
|
9682
|
+
events = process(
|
|
9683
|
+
items, gh, ci_store=self._ci(failed_started_at=1500.0), dry_run=True,
|
|
9684
|
+
)
|
|
9685
|
+
failed = [e for e in events if e.kind == "checks_failed"][0]
|
|
9686
|
+
assert failed.message == "(dry run) would be blocked: checks failed: windows (failure)"
|
|
9687
|
+
|
|
9688
|
+
def test_unreadable_base_anchor_omits_the_claim_rather_than_guessing(self) -> None:
|
|
9689
|
+
"""When the base timestamp can't be read at all, the stale-looking
|
|
9690
|
+
default inside `_ci_checks_are_stale` must NOT make this function
|
|
9691
|
+
assert staleness it has no evidence for — `ci_staleness_note`'s own
|
|
9692
|
+
anchor read fails the same way and the suffix comes back empty."""
|
|
9693
|
+
class _NoTimestampGh(FakeGh):
|
|
9694
|
+
pass
|
|
9695
|
+
|
|
9696
|
+
items = [_q("w1", pr=99)]
|
|
9697
|
+
events = process(
|
|
9698
|
+
items, _NoTimestampGh(), ci_store=self._ci(failed_started_at=500.0),
|
|
9699
|
+
)
|
|
9700
|
+
failed = [e for e in events if e.kind == "checks_failed"][0]
|
|
9701
|
+
assert failed.message == "checks failed: windows (failure)"
|
|
9702
|
+
|
|
9703
|
+
def test_checks_failed_stale_suffix_direct(self) -> None:
|
|
9704
|
+
"""Direct unit coverage of the suffix renderer, independent of the
|
|
9705
|
+
`process()` plumbing around it."""
|
|
9706
|
+
failed = [_check("windows", started_at=500.0)]
|
|
9707
|
+
suffix = mq.checks_failed_stale_suffix(
|
|
9708
|
+
failed, self._Gh(), "acme/api", "main",
|
|
9709
|
+
)
|
|
9710
|
+
assert "predates the current base" in suffix
|
|
9711
|
+
assert "rebase" in suffix
|
|
9712
|
+
|
|
9713
|
+
def test_checks_failed_stale_suffix_empty_when_anchor_unreadable(self) -> None:
|
|
9714
|
+
failed = [_check("windows", started_at=500.0)]
|
|
9715
|
+
suffix = mq.checks_failed_stale_suffix(failed, None, "acme/api", "main")
|
|
9716
|
+
assert suffix == ""
|
|
9717
|
+
|
|
9718
|
+
|
|
9593
9719
|
class TestProcessConflictedEmptyChecks:
|
|
9594
9720
|
"""#1877: a conflicted PR reports zero CI checks — GitHub can't build a
|
|
9595
9721
|
merge ref to run a `pull_request`-triggered workflow against it. Before
|