code-coordinator 0.5.490__tar.gz → 0.5.492__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.490 → code_coordinator-0.5.492}/PKG-INFO +1 -1
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/test_gate.py +39 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/diagnose.py +164 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/merge_queue.py +165 -68
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/state.py +315 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test.py +54 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_diagnose.py +153 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gates.py +24 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_merge_queue.py +126 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_state.py +212 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.gitignore +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/CLAUDE.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/GOAL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/LICENSE +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/MANIFEST.in +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/README.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/__init__.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agent.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/audit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/backup.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/block_log.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/board_service.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/brain.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/claim.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/cli.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/client.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/codegen.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/comments.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/config.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dao.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/db.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deps.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/drive.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/events.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/filelock.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/freshness.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gates.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/goal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/context.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/models.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/render.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/units.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/hooks.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/interactive.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/models.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/network.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notify.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/openapi.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/parentage.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/plans.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/progress.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/release_window.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/reports.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/review.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/self_health.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/smoke.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/split_work.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/sql.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/test_author.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/test_report.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/usage.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/install-agent.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/pyproject.toml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/setup.cfg +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/__init__.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/backends.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/conftest.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_client.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_db.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_events.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_init.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_models.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_network.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_session.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_split.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.490 → code_coordinator-0.5.492}/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
|
|
@@ -735,6 +735,22 @@ def diagnose_stage(
|
|
|
735
735
|
latest = _latest(assignments)
|
|
736
736
|
|
|
737
737
|
if latest is None:
|
|
738
|
+
# #3383: a `review_claims` row held for a work assignment with ZERO
|
|
739
|
+
# review/test-author/mock-author rows (never dispatched, or all
|
|
740
|
+
# deleted) is unreachable from `_recover_review` below — that
|
|
741
|
+
# function only ever runs once `latest` above is non-None. Before
|
|
742
|
+
# this, `--stage review` hit this exact branch and reported the
|
|
743
|
+
# stage healthy while `dispatch_review` was permanently wedged
|
|
744
|
+
# behind the leaked claim (#3206's failure one state earlier — see
|
|
745
|
+
# `_leaked_review_claim_without_row`'s docstring). Checked BEFORE
|
|
746
|
+
# the "no review assignment" finding below, on claim state rather
|
|
747
|
+
# than on row existence, exactly as #3206 already does once a row
|
|
748
|
+
# exists.
|
|
749
|
+
if stage == "review" and _leaked_review_claim_without_row(
|
|
750
|
+
board, repo_name, issue_number, res, reset=reset, dry_run=dry_run,
|
|
751
|
+
):
|
|
752
|
+
_cleanup_issue(board, config, repo_name, issue_number, res, dry_run=dry_run, reset=reset)
|
|
753
|
+
return res
|
|
738
754
|
res.findings.append(f"no {stage} assignment on the board for #{issue_number}")
|
|
739
755
|
res.recovered = True # nothing wedged
|
|
740
756
|
# Still run the issue-wide cleanup below.
|
|
@@ -818,6 +834,154 @@ def diagnose_stage(
|
|
|
818
834
|
return res
|
|
819
835
|
|
|
820
836
|
|
|
837
|
+
# #3383: a claim taken by `claim_review_dispatch` shortly before its caller
|
|
838
|
+
# inserts the review row it's claiming for looks, from a single read,
|
|
839
|
+
# identical to a genuinely leaked claim — the same false-positive window
|
|
840
|
+
# `_recover_review` below already documents for the terminal-row case
|
|
841
|
+
# (#3206). Below this age the claim is reported but NOT offered for release;
|
|
842
|
+
# above it, treated as leaked.
|
|
843
|
+
#
|
|
844
|
+
# NOT short on purpose — `dispatch_review` (coord/review.py) claims at
|
|
845
|
+
# `claim_review_dispatch` (~line 3070) and does NOT insert the review's
|
|
846
|
+
# `assignments` row until `record_dispatched_assignment` (~line 3763); its
|
|
847
|
+
# own `except Exception` handler at ~line 3815 calls the ~500 lines between
|
|
848
|
+
# those two points "pr_lookup, briefing assembly, JSON handling of
|
|
849
|
+
# agent_response, ...". That gap includes several sequential GitHub API
|
|
850
|
+
# calls (`work_is_terminal`, `branch_commits_ahead`, `pr_lookup`,
|
|
851
|
+
# `branch_exists_on_remote`, `pr_diff`, `get_compare_files`,
|
|
852
|
+
# `get_compare_diff`, `get_pr_commit_messages`, an issue-body fetch) and then
|
|
853
|
+
# a candidate loop that POSTs to each reviewer machine's `/assign` with
|
|
854
|
+
# `timeout=ASSIGN_POST_TIMEOUT_SECS` (`coord/dispatch.py` — 60.0s),
|
|
855
|
+
# falling through to the next candidate on rejection/timeout/unreachability.
|
|
856
|
+
# A single slow/unreachable first-choice reviewer machine alone can burn the
|
|
857
|
+
# full 60s before a second candidate is even tried, and there is no hard cap
|
|
858
|
+
# on candidate count — so this has to clear that whole chain, not one
|
|
859
|
+
# network round trip. Picked as a small multiple of minutes so it
|
|
860
|
+
# comfortably outlasts a worst-case multi-candidate dispatch plus GitHub API
|
|
861
|
+
# latency, while still being short enough that a *genuinely* leaked claim
|
|
862
|
+
# doesn't sit unrecoverable for long once someone runs `--reset`.
|
|
863
|
+
_REVIEW_CLAIM_LEAK_GRACE_SECS = 600.0
|
|
864
|
+
|
|
865
|
+
|
|
866
|
+
def _leaked_review_claim_without_row(
|
|
867
|
+
board: "Board",
|
|
868
|
+
repo_name: str,
|
|
869
|
+
issue_number: int,
|
|
870
|
+
res: DiagnoseResult,
|
|
871
|
+
*,
|
|
872
|
+
reset: bool,
|
|
873
|
+
dry_run: bool,
|
|
874
|
+
) -> bool:
|
|
875
|
+
"""#3383: detect (and, under ``--reset``, release) a leaked
|
|
876
|
+
``review_claims`` row for a work assignment that has NO review /
|
|
877
|
+
test-author / mock-author row at all — the one shape `_recover_review`
|
|
878
|
+
can never see, because `diagnose_stage` only calls it once
|
|
879
|
+
`stage_assignments(..., "review")` finds a row. A claim can be (and, per
|
|
880
|
+
the issue that reported this, was) taken and never released when the
|
|
881
|
+
work assignment it's keyed on was dispatched to review, that review
|
|
882
|
+
never got as far as inserting its own `assignments` row (or its row was
|
|
883
|
+
later deleted, e.g. by an earlier `--reset`), and the claim outlived it.
|
|
884
|
+
Every future `dispatch_review` for that work assignment then denies
|
|
885
|
+
forever with the misleading #3113 "lost the atomic dispatch-claim race"
|
|
886
|
+
reason — while `coord diagnose --stage review` (which hit the
|
|
887
|
+
`latest is None` "no review assignment" branch before this function
|
|
888
|
+
existed) reported the stage healthy.
|
|
889
|
+
|
|
890
|
+
Checked against the WORK assignment's id — `claim_review_dispatch` is
|
|
891
|
+
keyed on the id of the assignment BEING reviewed, never on a review
|
|
892
|
+
row's own id (see `_recover_review`'s `work_assignment_id` resolution).
|
|
893
|
+
|
|
894
|
+
Returns ``True`` when a claim was found (whether or not it could be
|
|
895
|
+
released yet — see the grace-period case) and this function has already
|
|
896
|
+
appended the appropriate finding(s); ``False`` when there is nothing to
|
|
897
|
+
report, in which case the caller's own "no review assignment" message
|
|
898
|
+
is the correct (healthy) diagnosis.
|
|
899
|
+
"""
|
|
900
|
+
from coord.state import ( # noqa: PLC0415
|
|
901
|
+
has_review_claim,
|
|
902
|
+
release_review_dispatch_claim,
|
|
903
|
+
review_claim_age_secs,
|
|
904
|
+
)
|
|
905
|
+
|
|
906
|
+
# Narrowing, acknowledged: this only checks the NEWEST `work`-type row
|
|
907
|
+
# for the issue, whereas `claim_review_dispatch` is keyed on whatever
|
|
908
|
+
# work-assignment id `dispatch_review` was actually called with. If the
|
|
909
|
+
# issue ever accumulates more than one `work` row (e.g. a rework/retry
|
|
910
|
+
# dispatched after the original work assignment that leaked the claim),
|
|
911
|
+
# a claim held on the *older* id is invisible here because this checks
|
|
912
|
+
# only the *newest* one. `_recover_review` avoids this by reading the
|
|
913
|
+
# exact id off the review row's own `review_of_assignment_id` FK — there
|
|
914
|
+
# is no review row here to read that FK from, so this has to guess.
|
|
915
|
+
# Probably rare, and the issue's own "worth also considering" `coord
|
|
916
|
+
# doctor` suggestion is the more complete fix; left as a known gap
|
|
917
|
+
# rather than iterating over every `work` row here.
|
|
918
|
+
work_rows = stage_assignments(board, repo_name, issue_number, "work")
|
|
919
|
+
work_latest = _latest(work_rows)
|
|
920
|
+
if work_latest is None or not work_latest.assignment_id:
|
|
921
|
+
return False
|
|
922
|
+
work_assignment_id = work_latest.assignment_id
|
|
923
|
+
if not has_review_claim(work_assignment_id):
|
|
924
|
+
return False
|
|
925
|
+
|
|
926
|
+
age = review_claim_age_secs(work_assignment_id)
|
|
927
|
+
if age is not None and age < _REVIEW_CLAIM_LEAK_GRACE_SECS:
|
|
928
|
+
# Too fresh to distinguish from an in-flight `dispatch_review` call
|
|
929
|
+
# that has taken the claim but not yet inserted its review row —
|
|
930
|
+
# report it, but don't offer to release something that might still
|
|
931
|
+
# be a live, wanted dispatch.
|
|
932
|
+
res.findings.append(
|
|
933
|
+
f"work assignment {work_assignment_id} holds a review-dispatch "
|
|
934
|
+
f"claim taken {age:.1f}s ago with no review row yet — likely an "
|
|
935
|
+
"in-flight dispatch_review, not a leak; re-run diagnose again "
|
|
936
|
+
"shortly if this persists"
|
|
937
|
+
)
|
|
938
|
+
res.recovered = True
|
|
939
|
+
return True
|
|
940
|
+
|
|
941
|
+
res.findings.append(
|
|
942
|
+
f"no review assignment exists for #{issue_number}, but work "
|
|
943
|
+
f"assignment {work_assignment_id} still holds a review-dispatch "
|
|
944
|
+
"claim (leaked review_claims row, #3383 — the #3206 class one state "
|
|
945
|
+
"earlier) — every future dispatch_review for this work assignment "
|
|
946
|
+
"will deny with the misleading #3113 'lost the atomic dispatch-claim "
|
|
947
|
+
"race' reason until it is released. Re-run with --reset to release it."
|
|
948
|
+
)
|
|
949
|
+
res.recovered = False
|
|
950
|
+
res.needs_reset = True
|
|
951
|
+
|
|
952
|
+
if reset:
|
|
953
|
+
if dry_run:
|
|
954
|
+
res.findings.append(
|
|
955
|
+
"(dry-run) would release the leaked review-dispatch claim"
|
|
956
|
+
)
|
|
957
|
+
return True
|
|
958
|
+
release_review_dispatch_claim(work_assignment_id)
|
|
959
|
+
if has_review_claim(work_assignment_id):
|
|
960
|
+
res.findings.append(
|
|
961
|
+
f"release requested for {work_assignment_id}'s "
|
|
962
|
+
"review-dispatch claim, but it is still present on re-read "
|
|
963
|
+
"— the release did NOT persist"
|
|
964
|
+
)
|
|
965
|
+
else:
|
|
966
|
+
res.actions_taken.append(
|
|
967
|
+
"released leaked review-dispatch claim for work assignment "
|
|
968
|
+
f"{work_assignment_id} — dispatch_review is now re-dispatchable"
|
|
969
|
+
)
|
|
970
|
+
res.reset_performed = True
|
|
971
|
+
res.recovered = True
|
|
972
|
+
res.branch_preserved = True
|
|
973
|
+
# Matches `_do_reset`'s (#3206) convention: a successful release
|
|
974
|
+
# must clear the `needs_reset=True` set a few lines above, or
|
|
975
|
+
# `to_json_dict()` — documented as read by the TUI without
|
|
976
|
+
# scraping human-readable lines — carries the internally
|
|
977
|
+
# contradictory `recovered=true needs_reset=true
|
|
978
|
+
# reset_performed=true` even though the plain-text CLI's "still
|
|
979
|
+
# wedged" warning happens to be gated on `not reset` and so never
|
|
980
|
+
# shows it.
|
|
981
|
+
res.needs_reset = False
|
|
982
|
+
return True
|
|
983
|
+
|
|
984
|
+
|
|
821
985
|
def _recover_review(
|
|
822
986
|
board, config, latest, state, res: DiagnoseResult, *, dry_run: bool
|
|
823
987
|
) -> None:
|
|
@@ -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.
|