code-coordinator 0.5.491__tar.gz → 0.5.493__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.491 → code_coordinator-0.5.493}/PKG-INFO +1 -1
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/test_gate.py +39 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/db.py +123 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/merge_queue.py +165 -68
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/state.py +456 -29
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test.py +54 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_db.py +118 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gates.py +24 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_merge_queue.py +126 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_state.py +595 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.gitignore +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/CLAUDE.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/GOAL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/LICENSE +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/MANIFEST.in +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/README.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/__init__.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agent.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/audit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/backup.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/block_log.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/board_service.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/brain.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/claim.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/cli.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/client.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/codegen.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/comments.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/config.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dao.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deps.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/drive.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/events.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/filelock.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/freshness.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gates.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/goal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/context.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/models.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/render.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/units.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/hooks.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/interactive.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/models.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/network.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notify.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/openapi.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/parentage.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/plans.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/progress.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/release_window.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/reports.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/review.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/self_health.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/smoke.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/split_work.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/sql.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/test_author.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/test_report.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/usage.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/install-agent.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/pyproject.toml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/setup.cfg +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/__init__.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/backends.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/conftest.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_client.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_events.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_init.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_models.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_network.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_session.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_split.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/write_parity.py +0 -0
|
@@ -565,6 +565,45 @@ def test(assignment_id: str, config_path: Path, verdict: str | None, reason: str
|
|
|
565
565
|
elif verdict == "running":
|
|
566
566
|
click.echo(" (transient — record --passed/--fail/--skipped when the run concludes)")
|
|
567
567
|
|
|
568
|
+
# #3386 (item 3 of #3378): tell the human RIGHT HERE how close (or
|
|
569
|
+
# past) this repo is to the consecutive baseline-red merge-block
|
|
570
|
+
# limit — `record_test_verdict` above just incremented it if this
|
|
571
|
+
# was a `baseline_red`-confirmed skip
|
|
572
|
+
# (`coord.confirm_test.test_confirmation_for_skip_reason`). Silence
|
|
573
|
+
# here is exactly how #3378's bypass ran unnoticed for 33 days: the
|
|
574
|
+
# command that records the bypass is the one place a human is
|
|
575
|
+
# already looking.
|
|
576
|
+
if test_confirmation == "baseline_red":
|
|
577
|
+
from coord.state import (
|
|
578
|
+
BASELINE_RED_STREAK_LIMIT,
|
|
579
|
+
baseline_red_merge_blocked,
|
|
580
|
+
baseline_red_streak,
|
|
581
|
+
)
|
|
582
|
+
|
|
583
|
+
# #3386 review: `baseline_red_merge_blocked` is the ONE predicate
|
|
584
|
+
# both the real merge refusal (`coord.merge_queue.
|
|
585
|
+
# evaluate_smoke_verdict`) and any repo-level alert surface must
|
|
586
|
+
# call — never a second, independently-derived comparison
|
|
587
|
+
# against `BASELINE_RED_STREAK_LIMIT` (#2096). This echo used to
|
|
588
|
+
# re-derive `streak >= BASELINE_RED_STREAK_LIMIT` itself; now it
|
|
589
|
+
# asks the same function the merge gate asks, so the two can
|
|
590
|
+
# never silently disagree.
|
|
591
|
+
streak = baseline_red_streak(assignment.repo_name)
|
|
592
|
+
if baseline_red_merge_blocked(assignment.repo_name):
|
|
593
|
+
click.echo(
|
|
594
|
+
f" WARNING: {assignment.repo_name} has now recorded {streak} "
|
|
595
|
+
f"consecutive baseline-red (#2170) classifications — "
|
|
596
|
+
f"`coord merge` will refuse EVERY branch on this repo until "
|
|
597
|
+
f"the merge base itself is fixed (#3386)."
|
|
598
|
+
)
|
|
599
|
+
else:
|
|
600
|
+
click.echo(
|
|
601
|
+
f" note: {assignment.repo_name}'s consecutive baseline-red "
|
|
602
|
+
f"streak is now {streak}/{BASELINE_RED_STREAK_LIMIT} — "
|
|
603
|
+
f"merges for this repo stop at {BASELINE_RED_STREAK_LIMIT} "
|
|
604
|
+
f"in a row with no genuine pass in between (#3386)."
|
|
605
|
+
)
|
|
606
|
+
|
|
568
607
|
# #271 part 1: restore the local checkout to `default_branch` after a
|
|
569
608
|
# pass/skip verdict (legacy safety — #561 means a Build no longer moves
|
|
570
609
|
# the base, so this is a no-op on fresh checkouts), and #561: remove the
|
|
@@ -666,6 +666,129 @@ def rollback_after_driver_error(conn: Any | None, exc: BaseException) -> None:
|
|
|
666
666
|
pass
|
|
667
667
|
|
|
668
668
|
|
|
669
|
+
def undo_pending_write(conn: Any | None, exc: BaseException, *, undo: Callable[[], Any]) -> None:
|
|
670
|
+
"""Run *undo* — a compensating statement touching only THIS write's own
|
|
671
|
+
row — after *exc*, the #3382 sibling of
|
|
672
|
+
:func:`rollback_after_driver_error` for a writer whose own
|
|
673
|
+
``conn.commit()`` call, not just the statement before it, can raise.
|
|
674
|
+
|
|
675
|
+
:func:`rollback_after_driver_error` deliberately no-ops for a plain
|
|
676
|
+
SQLite error (see its docstring): that is correct when the failure is a
|
|
677
|
+
STATEMENT that never got to write anything — SQLite's ``SQLITE_BUSY``,
|
|
678
|
+
hit while acquiring the lock a write needs, leaves nothing applied, so
|
|
679
|
+
simply re-running the whole write closure from scratch (what
|
|
680
|
+
:func:`retry_on_locked` does) is exactly as good as a rollback.
|
|
681
|
+
|
|
682
|
+
That reasoning does not hold when it is ``conn.commit()`` itself that
|
|
683
|
+
raises. WAL-checkpoint contention can make ``COMMIT`` hit
|
|
684
|
+
``SQLITE_BUSY`` *after* the statement(s) before it already applied
|
|
685
|
+
inside the still-open transaction — the write is neither committed nor
|
|
686
|
+
undone, so it sits there, genuinely pending, on ``coord.db``'s shared
|
|
687
|
+
process-wide connection, ready for a completely unrelated handler's next
|
|
688
|
+
unrelated ``commit()`` to durably persist it later. #3382: this is
|
|
689
|
+
exactly how a ``review_claims`` row survived two callers who each saw
|
|
690
|
+
their own ``/review-claim`` POST fail with a 503 — neither call's own
|
|
691
|
+
retry-free write had anything guarding its ``commit()``, so the pending
|
|
692
|
+
insert outlived both failed calls and was swept up by a later,
|
|
693
|
+
completely unrelated write on the same shared connection.
|
|
694
|
+
|
|
695
|
+
A bare retry of the closure does not fix this the way it fixes a failed
|
|
696
|
+
statement, either: an ``INSERT OR IGNORE`` re-run against its own
|
|
697
|
+
still-pending prior insert reads back as a conflict (``rowcount == 0``),
|
|
698
|
+
so the retry silently misreports "someone else already holds this
|
|
699
|
+
claim" about a claim only this process's own earlier, abandoned attempt
|
|
700
|
+
took.
|
|
701
|
+
|
|
702
|
+
**Why a compensating statement, and not a transaction-level undo of any
|
|
703
|
+
kind (#3382 review rounds 1 and 2).** Two earlier shapes of this
|
|
704
|
+
function were both rejected, for the same underlying reason:
|
|
705
|
+
|
|
706
|
+
* ``conn.rollback()`` (round 1). On ``coord.db``'s shared, process-wide
|
|
707
|
+
SQLite singleton (see this module's own docstring), that discards
|
|
708
|
+
*every* other thread's not-yet-committed statement too — this process
|
|
709
|
+
dispatches other ``_*_local`` writers through ``run_in_threadpool`` on
|
|
710
|
+
real OS worker threads (the daemon's periodic tick, the ``/board``
|
|
711
|
+
build, ``/assignment/*`` handlers), and Python's ``sqlite3`` joins ANY
|
|
712
|
+
thread's statement issued on this one connection between commits into
|
|
713
|
+
the SAME open transaction. An unrelated writer that already got
|
|
714
|
+
``sql.execute``/``sql.insert_ignore``'s success back (nothing in this
|
|
715
|
+
tree commits internally — see ``coord/sql.py``) then silently loses it
|
|
716
|
+
when its own later ``conn.commit()`` no-ops or raises ``cannot commit
|
|
717
|
+
- no transaction is active`` — this issue's own second logged symptom.
|
|
718
|
+
|
|
719
|
+
* ``SAVEPOINT`` + ``ROLLBACK TO SAVEPOINT`` (round 2), whether the
|
|
720
|
+
savepoint name is a shared literal or made unique per call. Unique
|
|
721
|
+
names fix only the narrower half of the problem (two concurrent calls
|
|
722
|
+
resolving each other's marker, since SQLite binds a name to the most
|
|
723
|
+
recently established savepoint of that name). They do **not** fix the
|
|
724
|
+
half that matters: ``ROLLBACK TO SAVEPOINT`` reverts the database to
|
|
725
|
+
its state *just after that savepoint was established*, so it undoes
|
|
726
|
+
every statement issued since — including another thread's, which this
|
|
727
|
+
writer has no business undoing — and destroys that thread's own
|
|
728
|
+
savepoints along the way. Verified against a real ``sqlite3``
|
|
729
|
+
connection (Python 3.12, SQLite 3.45): with two distinctly-named
|
|
730
|
+
savepoints opened back to back and one row inserted after each,
|
|
731
|
+
``ROLLBACK TO`` the OUTER (uniquely-named) savepoint removes BOTH
|
|
732
|
+
rows. A transaction-scoped undo simply cannot express "mine only" on a
|
|
733
|
+
connection several threads write through.
|
|
734
|
+
|
|
735
|
+
So the undo is row-scoped instead: *undo* issues one statement that
|
|
736
|
+
names this write's own row and nothing else (delete the row this call
|
|
737
|
+
inserted, identified by its own ``claimed_at`` stamp; re-insert the row
|
|
738
|
+
this call deleted, with the ``claimed_at`` it read back first). It is
|
|
739
|
+
exact regardless of how other threads' statements interleave with this
|
|
740
|
+
one — before the failure or after it — because it never refers to their
|
|
741
|
+
rows.
|
|
742
|
+
|
|
743
|
+
It also degrades better than a transaction-level undo when an unrelated
|
|
744
|
+
thread's ``commit()`` lands *between* this write's statement and this
|
|
745
|
+
recovery: a savepoint would already have been destroyed by that commit
|
|
746
|
+
(``COMMIT`` releases all savepoints), leaving ``ROLLBACK TO`` to fail
|
|
747
|
+
and this write's row durably committed and leaked — precisely the
|
|
748
|
+
incident. The compensating statement instead stays pending and is
|
|
749
|
+
flushed by whichever ``commit()`` reaches it next (this closure's own
|
|
750
|
+
retry, or another writer's), so the net effect on this row is still
|
|
751
|
+
nothing.
|
|
752
|
+
|
|
753
|
+
Call this from the ``except sql.driver_errors():`` block of a write
|
|
754
|
+
closure that both executes a statement *and* calls ``conn.commit()``
|
|
755
|
+
itself, and **only when that closure's own statement actually applied**
|
|
756
|
+
(``cursor.rowcount``) — a statement that failed applied nothing, so
|
|
757
|
+
there is nothing to compensate, the same "a failed STATEMENT applies
|
|
758
|
+
nothing" reasoning :func:`rollback_after_driver_error` already
|
|
759
|
+
documents. Today's callers are the ``review_claims``/``smoke_claims``
|
|
760
|
+
claim and release writes in ``coord/state.py`` (#3113/#3333), the two
|
|
761
|
+
sites where "did this claim land" is an exclusive-ownership decision the
|
|
762
|
+
rest of the system relies on, unlike most of this module's writers where
|
|
763
|
+
a duplicate-on-retry UPDATE/DELETE is harmless.
|
|
764
|
+
|
|
765
|
+
Unlike :func:`rollback_after_driver_error`, this does not inspect *exc*
|
|
766
|
+
for a SQLSTATE: the plain-SQLite case above is exactly what it exists to
|
|
767
|
+
cover. On Postgres it is a harmless no-op in practice — a failed
|
|
768
|
+
``COMMIT`` there aborts the whole transaction (so *undo* raises
|
|
769
|
+
``InFailedSqlTransaction``, suppressed below) and
|
|
770
|
+
:func:`retry_on_locked`'s own :func:`rollback_after_driver_error` call
|
|
771
|
+
has already undone this write for real; ``get_connection()`` also hands
|
|
772
|
+
each THREAD its own connection there (see this module's docstring), so
|
|
773
|
+
no other thread's statement was ever at risk.
|
|
774
|
+
|
|
775
|
+
Same suppression rule as :func:`rollback_after_driver_error`: a ``None``
|
|
776
|
+
*conn* is a no-op, and a failure of *undo* itself is swallowed so it
|
|
777
|
+
never masks *exc*, the exception actually worth seeing. If the
|
|
778
|
+
compensating statement cannot run either (sustained contention
|
|
779
|
+
outlasting even this), this write's own row is left pending for the next
|
|
780
|
+
writer's eventual commit/rollback to resolve — the same residual,
|
|
781
|
+
already-accepted risk :func:`rollback_after_driver_error`'s own
|
|
782
|
+
suppressed-failure path carries today, not a new one.
|
|
783
|
+
"""
|
|
784
|
+
if conn is None:
|
|
785
|
+
return
|
|
786
|
+
try:
|
|
787
|
+
undo()
|
|
788
|
+
except Exception: # noqa: BLE001 — never mask the caught driver error
|
|
789
|
+
pass
|
|
790
|
+
|
|
791
|
+
|
|
669
792
|
# #2538: a handful of consecutive short retries — long enough to ride out a
|
|
670
793
|
# concurrent writer (the daemon's own passive tick, another `coord merge`/
|
|
671
794
|
# `coord notify` invocation) that only holds the DB for a moment, short
|
|
@@ -52,7 +52,13 @@ from coord.models import (
|
|
|
52
52
|
trust_issue_closed_for,
|
|
53
53
|
)
|
|
54
54
|
from coord.pr_body_lint import downgrade_closing_keywords, find_closing_references
|
|
55
|
-
from coord.state import
|
|
55
|
+
from coord.state import (
|
|
56
|
+
COORD_DIR,
|
|
57
|
+
baseline_red_merge_blocked,
|
|
58
|
+
baseline_red_streak,
|
|
59
|
+
dismiss_drive_escalation,
|
|
60
|
+
record_uat_verdict,
|
|
61
|
+
)
|
|
56
62
|
from coord.uat_checks import UatCheckResult, evaluate_uat_checks
|
|
57
63
|
|
|
58
64
|
_log = logging.getLogger(__name__)
|
|
@@ -1713,10 +1719,22 @@ def passes_merge_gates(a, config, board, gh_ops: "GhOps | None" = None) -> bool:
|
|
|
1713
1719
|
# non-``None`` to run) straight to SMOKE_OK — a verdict this code never
|
|
1714
1720
|
# actually confirmed still covers the current head. See
|
|
1715
1721
|
# `UNKNOWN_BRANCH_HEAD_REASON`.
|
|
1722
|
+
#
|
|
1723
|
+
# #3386 adds a fourth: SMOKE_BASELINE_RED_BLOCKED — a `"skipped"` verdict
|
|
1724
|
+
# confirmed `baseline_red` (#3378 item 2) exists and is otherwise fresh, but
|
|
1725
|
+
# this repo has racked up `BASELINE_RED_STREAK_LIMIT` (or more) of them in a
|
|
1726
|
+
# row with no genuine `passed` verdict in between. #1732's "skipped never
|
|
1727
|
+
# goes stale" exemption is deliberately narrower than it looks: it covers a
|
|
1728
|
+
# STRUCTURAL skip (nothing to smoke-test) unconditionally, but a
|
|
1729
|
+
# `baseline_red` skip is a claim that the CURRENT merge base — not the
|
|
1730
|
+
# branch — is why the suite fails, and #3378 found that claim, satisfied
|
|
1731
|
+
# every time, merges a repo whose `main` has been red for 33 days without
|
|
1732
|
+
# anyone noticing. See `coord.state.baseline_red_merge_blocked`.
|
|
1716
1733
|
SMOKE_OK = "ok"
|
|
1717
1734
|
SMOKE_MISSING = "missing"
|
|
1718
1735
|
SMOKE_STALE = "stale"
|
|
1719
1736
|
SMOKE_UNKNOWN = "unknown"
|
|
1737
|
+
SMOKE_BASELINE_RED_BLOCKED = "baseline_red_blocked"
|
|
1720
1738
|
|
|
1721
1739
|
|
|
1722
1740
|
def _short_sha(sha: str | None) -> str:
|
|
@@ -1773,6 +1791,9 @@ class SmokeVerdictStatus:
|
|
|
1773
1791
|
# sentence. `None` for every other kind, and for a SMOKE_UNKNOWN whose
|
|
1774
1792
|
# `gh_ops` stand-in didn't support `raise_on_transient` at all.
|
|
1775
1793
|
probe_error: "GhTransientError | None" = None
|
|
1794
|
+
# #3386: the repo's consecutive baseline-red streak that produced a
|
|
1795
|
+
# SMOKE_BASELINE_RED_BLOCKED verdict — `None` for every other kind.
|
|
1796
|
+
baseline_red_streak: int | None = None
|
|
1776
1797
|
|
|
1777
1798
|
@property
|
|
1778
1799
|
def short_reason(self) -> str | None:
|
|
@@ -1784,6 +1805,11 @@ class SmokeVerdictStatus:
|
|
|
1784
1805
|
return None
|
|
1785
1806
|
if self.kind == SMOKE_UNKNOWN:
|
|
1786
1807
|
return unknown_branch_head_reason(self.probe_error)
|
|
1808
|
+
if self.kind == SMOKE_BASELINE_RED_BLOCKED:
|
|
1809
|
+
return (
|
|
1810
|
+
f"{self.baseline_red_streak} consecutive baseline-red "
|
|
1811
|
+
"classifications — merge base needs fixing (#3386)"
|
|
1812
|
+
)
|
|
1787
1813
|
if self.kind == SMOKE_STALE:
|
|
1788
1814
|
if self.anchor == "run":
|
|
1789
1815
|
return (
|
|
@@ -1810,6 +1836,20 @@ class SmokeVerdictStatus:
|
|
|
1810
1836
|
# `unknown_branch_head_reason` appends real status/request-id/
|
|
1811
1837
|
# retry-after when `probe_error` carries any.
|
|
1812
1838
|
return unknown_branch_head_reason(self.probe_error)
|
|
1839
|
+
if self.kind == SMOKE_BASELINE_RED_BLOCKED:
|
|
1840
|
+
# #3386: a bypass that still merges is not a bypass. This repo
|
|
1841
|
+
# has recorded `baseline_red_streak` consecutive `baseline-red`
|
|
1842
|
+
# (#2170) classifications with no genuine `passed` verdict in
|
|
1843
|
+
# between — the merge base itself needs fixing before this or
|
|
1844
|
+
# any other branch on this repo merges. Waiving requires
|
|
1845
|
+
# `--skip-smoke`, same as any other smoke refusal; there is no
|
|
1846
|
+
# per-branch fix, only a repo-level one.
|
|
1847
|
+
return (
|
|
1848
|
+
f"merge refused: {self.baseline_red_streak} consecutive "
|
|
1849
|
+
"baseline-red (#2170) classifications on this repo with no "
|
|
1850
|
+
"genuine passed verdict in between — the merge base itself "
|
|
1851
|
+
"needs fixing, not another branch (#3386)"
|
|
1852
|
+
)
|
|
1813
1853
|
if self.kind == SMOKE_STALE:
|
|
1814
1854
|
aid = self.assignment_id or "<assignment>"
|
|
1815
1855
|
if self.anchor == "run":
|
|
@@ -3269,88 +3309,145 @@ def evaluate_smoke_verdict(
|
|
|
3269
3309
|
# moves — a rename upstream, or new commits on the branch, can't
|
|
3270
3310
|
# turn "there is nothing here a smoke test could exercise" into
|
|
3271
3311
|
# false. Only `passed` verdicts go through the #1479 base/branch
|
|
3272
|
-
# staleness check below; `skipped` is accepted
|
|
3273
|
-
|
|
3312
|
+
# staleness check below; a STRUCTURAL `skipped` is accepted
|
|
3313
|
+
# unconditionally, same as always.
|
|
3314
|
+
#
|
|
3315
|
+
# #3386: a `baseline_red`-confirmed skip (#3378 item 2) is NOT that
|
|
3316
|
+
# structural claim — it asserts the merge BASE, not the branch, is
|
|
3317
|
+
# why the suite fails, and that assertion is falsifiable two ways:
|
|
3318
|
+
# * item 3 — this repo has racked up too many of these in a row
|
|
3319
|
+
# with no genuine `passed` in between
|
|
3320
|
+
# (`coord.state.baseline_red_streak`), so even a fresh
|
|
3321
|
+
# one must not merge until the base itself is fixed. A bypass
|
|
3322
|
+
# that still merges every time is not a bypass, it is an outage
|
|
3323
|
+
# with a footnote — confirmed live on #3383 against a `main`
|
|
3324
|
+
# that had been red 33 days.
|
|
3325
|
+
# * item 4 — the branch has since moved on (a fix round pushed new
|
|
3326
|
+
# commits), so the classification no longer describes what is
|
|
3327
|
+
# actually on the branch (#3376's live gate defect: a skip cited
|
|
3328
|
+
# from a since-superseded assignment). Falls through to the same
|
|
3329
|
+
# branch-content check `passed` gets below.
|
|
3330
|
+
# Deliberately does NOT run the base-move check just below even for
|
|
3331
|
+
# a `baseline_red` skip: that check exists to catch a `passed`
|
|
3332
|
+
# MEASUREMENT going stale, whereas "the base is red" is exactly what
|
|
3333
|
+
# this classification already asserts — item 3's streak bound is
|
|
3334
|
+
# what covers a chronically-moving red base instead.
|
|
3335
|
+
test_confirmation = getattr(a, "test_confirmation", None)
|
|
3336
|
+
# "baseline_red" mirrors `coord.confirm_test.TEST_CONFIRMATION_
|
|
3337
|
+
# BASELINE_RED` — kept as a literal (not an import) to avoid a
|
|
3338
|
+
# module-level import of `coord.confirm_test`, which imports
|
|
3339
|
+
# `coord.revalidate`, which imports THIS module. Pinned against
|
|
3340
|
+
# drift by `tests/test_merge_queue.py::TestStaleSmokeVerdictReporting::
|
|
3341
|
+
# test_literal_matches_the_canonical_confirm_test_constant`.
|
|
3342
|
+
is_baseline_red_skip = (
|
|
3343
|
+
test_state == "skipped" and test_confirmation == "baseline_red"
|
|
3344
|
+
)
|
|
3345
|
+
if test_state == "skipped" and not is_baseline_red_skip:
|
|
3274
3346
|
return SmokeVerdictStatus(
|
|
3275
3347
|
ok=True, kind=SMOKE_OK, assignment_id=getattr(a, "assignment_id", None)
|
|
3276
3348
|
)
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
base_sha_attempted = True
|
|
3293
|
-
|
|
3294
|
-
# #2704: the live probe just above positively confirmed it could not
|
|
3295
|
-
# read GitHub, while a recorded verdict names a specific base SHA to
|
|
3296
|
-
# compare against. Before #2704 a failed (or merely un-attempted)
|
|
3297
|
-
# lookup was indistinguishable from a clean `None`, so this fell
|
|
3298
|
-
# straight through to the "base moved" check below, which is a
|
|
3299
|
-
# silent no-op on `current_base_sha is None` and lets execution
|
|
3300
|
-
# reach SMOKE_OK further down: a verdict this call never actually
|
|
3301
|
-
# confirmed still covers the current base. Fail closed instead — we
|
|
3302
|
-
# do not KNOW whether the base moved, so we cannot vouch for it.
|
|
3303
|
-
if test_base_sha is not None and base_sha_probe_failed:
|
|
3304
|
-
if unknown is None:
|
|
3305
|
-
unknown = SmokeVerdictStatus(
|
|
3349
|
+
if is_baseline_red_skip:
|
|
3350
|
+
# #3386 review: the streak store is keyed by the coordinator's
|
|
3351
|
+
# internal short `repo_name` (what `record_baseline_red_
|
|
3352
|
+
# classification`/`_record_test_verdict_local` write) — NOT by
|
|
3353
|
+
# `repo_github` (an "owner/repo" GitHub slug). A prior version
|
|
3354
|
+
# of this fell back to `repo_github` when `a.repo_name` was
|
|
3355
|
+
# falsy; that fallback would have looked up the wrong key and
|
|
3356
|
+
# silently read streak=0 (never block) had it ever actually
|
|
3357
|
+
# fired. A board-recorded work assignment's `repo_name` should
|
|
3358
|
+
# always be populated, so there is no real fallback value to
|
|
3359
|
+
# have here — dropped rather than kept as dead code with wrong
|
|
3360
|
+
# semantics.
|
|
3361
|
+
repo_for_streak = getattr(a, "repo_name", None)
|
|
3362
|
+
if repo_for_streak and baseline_red_merge_blocked(repo_for_streak):
|
|
3363
|
+
return SmokeVerdictStatus(
|
|
3306
3364
|
ok=False,
|
|
3307
|
-
kind=
|
|
3365
|
+
kind=SMOKE_BASELINE_RED_BLOCKED,
|
|
3308
3366
|
assignment_id=getattr(a, "assignment_id", None),
|
|
3309
|
-
|
|
3310
|
-
recorded_sha=test_base_sha,
|
|
3311
|
-
probe_error=base_sha_probe_error,
|
|
3367
|
+
baseline_red_streak=baseline_red_streak(repo_for_streak),
|
|
3312
3368
|
)
|
|
3313
|
-
continue
|
|
3314
3369
|
|
|
3315
|
-
# #1738/#1778/#1847: the base moved, but a moved SHA doesn't
|
|
3316
|
-
# necessarily mean a content change that could affect a test result.
|
|
3317
|
-
# `_base_move_spared` tries, in order: is the base move itself
|
|
3318
|
-
# provably inert content (docs/scripts/issue-template only, #1738);
|
|
3319
|
-
# failing that, is *this branch*'s entire diff (as actually tested,
|
|
3320
|
-
# test_base_sha..test_head_sha) provably inert (#1778); failing that,
|
|
3321
|
-
# do the two diffs simply touch disjoint files (#1847) — a
|
|
3322
|
-
# substantive base move and a substantive branch that have nothing to
|
|
3323
|
-
# do with each other. Any one being true means the tested combination
|
|
3324
|
-
# is still covered — fall through to the branch-content check below
|
|
3325
|
-
# instead of staling here. If the branch has since gained real
|
|
3326
|
-
# content, that check still catches it independently via the
|
|
3327
|
-
# patch-id compare (#1847 doesn't short-circuit it).
|
|
3328
3370
|
base_move_spare_reason: str | None = None
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3371
|
+
test_base_sha = getattr(a, "test_base_sha", None)
|
|
3372
|
+
if test_state == "passed":
|
|
3373
|
+
# Merge base moved: the tested combination (this branch + that
|
|
3374
|
+
# base) no longer exists, even if the branch's own diff is
|
|
3375
|
+
# unchanged. #3386: skipped entirely for a `baseline_red` skip —
|
|
3376
|
+
# see the comment above.
|
|
3377
|
+
if (
|
|
3378
|
+
test_base_sha is not None
|
|
3379
|
+
and current_base_sha is None
|
|
3380
|
+
and not base_sha_attempted
|
|
3381
|
+
and gh_ops is not None
|
|
3382
|
+
and repo_github
|
|
3383
|
+
and target_branch
|
|
3384
|
+
):
|
|
3385
|
+
current_base_sha, base_sha_probe_failed, base_sha_probe_error = (
|
|
3386
|
+
_gh_get_branch_sha(gh_ops, repo_github, target_branch)
|
|
3387
|
+
)
|
|
3388
|
+
base_sha_attempted = True
|
|
3389
|
+
|
|
3390
|
+
# #2704: the live probe just above positively confirmed it could
|
|
3391
|
+
# not read GitHub, while a recorded verdict names a specific
|
|
3392
|
+
# base SHA to compare against. Before #2704 a failed (or merely
|
|
3393
|
+
# un-attempted) lookup was indistinguishable from a clean
|
|
3394
|
+
# `None`, so this fell straight through to the "base moved"
|
|
3395
|
+
# check below, which is a silent no-op on `current_base_sha is
|
|
3396
|
+
# None` and lets execution reach SMOKE_OK further down: a
|
|
3397
|
+
# verdict this call never actually confirmed still covers the
|
|
3398
|
+
# current base. Fail closed instead — we do not KNOW whether
|
|
3399
|
+
# the base moved, so we cannot vouch for it.
|
|
3400
|
+
if test_base_sha is not None and base_sha_probe_failed:
|
|
3401
|
+
if unknown is None:
|
|
3402
|
+
unknown = SmokeVerdictStatus(
|
|
3345
3403
|
ok=False,
|
|
3346
|
-
kind=
|
|
3404
|
+
kind=SMOKE_UNKNOWN,
|
|
3347
3405
|
assignment_id=getattr(a, "assignment_id", None),
|
|
3348
3406
|
anchor="base",
|
|
3349
3407
|
recorded_sha=test_base_sha,
|
|
3350
|
-
|
|
3408
|
+
probe_error=base_sha_probe_error,
|
|
3351
3409
|
)
|
|
3352
3410
|
continue
|
|
3353
3411
|
|
|
3412
|
+
# #1738/#1778/#1847: the base moved, but a moved SHA doesn't
|
|
3413
|
+
# necessarily mean a content change that could affect a test
|
|
3414
|
+
# result. `_base_move_spared` tries, in order: is the base move
|
|
3415
|
+
# itself provably inert content (docs/scripts/issue-template
|
|
3416
|
+
# only, #1738); failing that, is *this branch*'s entire diff (as
|
|
3417
|
+
# actually tested, test_base_sha..test_head_sha) provably inert
|
|
3418
|
+
# (#1778); failing that, do the two diffs simply touch disjoint
|
|
3419
|
+
# files (#1847) — a substantive base move and a substantive
|
|
3420
|
+
# branch that have nothing to do with each other. Any one being
|
|
3421
|
+
# true means the tested combination is still covered — fall
|
|
3422
|
+
# through to the branch-content check below instead of staling
|
|
3423
|
+
# here. If the branch has since gained real content, that check
|
|
3424
|
+
# still catches it independently via the patch-id compare
|
|
3425
|
+
# (#1847 doesn't short-circuit it).
|
|
3426
|
+
if (
|
|
3427
|
+
test_base_sha is not None
|
|
3428
|
+
and current_base_sha is not None
|
|
3429
|
+
and test_base_sha != current_base_sha
|
|
3430
|
+
):
|
|
3431
|
+
spared, base_move_spare_reason = _base_move_spared(
|
|
3432
|
+
gh_ops,
|
|
3433
|
+
repo_github,
|
|
3434
|
+
test_base_sha,
|
|
3435
|
+
current_base_sha,
|
|
3436
|
+
getattr(a, "test_head_sha", None),
|
|
3437
|
+
)
|
|
3438
|
+
if not spared:
|
|
3439
|
+
# stale: re-verify against the new base
|
|
3440
|
+
if stale is None:
|
|
3441
|
+
stale = SmokeVerdictStatus(
|
|
3442
|
+
ok=False,
|
|
3443
|
+
kind=SMOKE_STALE,
|
|
3444
|
+
assignment_id=getattr(a, "assignment_id", None),
|
|
3445
|
+
anchor="base",
|
|
3446
|
+
recorded_sha=test_base_sha,
|
|
3447
|
+
current_sha=current_base_sha,
|
|
3448
|
+
)
|
|
3449
|
+
continue
|
|
3450
|
+
|
|
3354
3451
|
# Branch content changed since the test ran. Same SHA-then-patch-id
|
|
3355
3452
|
# fallback as has_approved_review: a content-identical rebase (SHA
|
|
3356
3453
|
# moved, patch-id didn't) does not invalidate the verdict.
|