code-coordinator 0.5.661__tar.gz → 0.5.663__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.661 → code_coordinator-0.5.663}/PKG-INFO +1 -1
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/confirm_test.py +38 -19
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/db.py +22 -2
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/merge_queue.py +49 -2
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notify.py +29 -5
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/progress.py +24 -3
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_fix_headless_review.py +40 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_db.py +5 -1
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_merge_queue.py +103 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notify.py +54 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_progress.py +54 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/.gitignore +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/CLAUDE.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/GOAL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/LICENSE +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/MANIFEST.in +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/README.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/__init__.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/agent.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/app_drive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/app_drive_daemon.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/audit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/backup.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/block_log.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/board_service.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/brain.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/briefing_lessons.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/claim.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/cli.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/client.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/codegen.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/app_drive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/smoke.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/comments.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/config.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dao.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/deps.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/drive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/events.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/filelock.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/freshness.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/gates.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/goal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/gui_lane_preflight.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/context.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/models.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/render.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/health/units.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/hooks.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/interactive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/key_spec.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/models.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/native_fs_wait.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/native_pixels.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/network.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/nightly_runner.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/nightly_smoke.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/nightly_status.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/nightly_store.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/openapi.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/parentage.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/plans.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/prereview_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/release_window.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/reports.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/review.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/self_health.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/shell_exec_wrap.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/smoke.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/split_work.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/sql.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/state.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/test_author.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/test_report.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/upstream_gaps.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/usage.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/install-agent.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/pyproject.toml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/comment_cruft.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/setup.cfg +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/__init__.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/backends.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/conftest.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_graceful_shutdown_3649.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_graph_refresh.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_app_drive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_board_nightly_status.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_briefing_lessons.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_inject_board_less.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_issue_close_wrong_repo.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_smoke_nightly.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_smoke_nightly_sweep.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_nightly.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_client.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_comment_cruft.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_config.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_config_prereview_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_events.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_init.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_key_spec.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_merge_verification.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_models.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_models_pinned_1650.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_native_fs_wait.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_native_pixels.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_network.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_nightly_runner.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_nightly_smoke.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_nightly_status.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_nightly_store.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_no_eligible_host_3600.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_plain_runner_smoke_3673.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_prereview_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_review.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_session.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_smoke_plain_runner_3673.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_split.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_state.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_upstream_gaps.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.661 → code_coordinator-0.5.663}/tests/write_parity.py +0 -0
|
@@ -788,6 +788,41 @@ class ConfirmationResult:
|
|
|
788
788
|
return self.kind in INCONCLUSIVE_KINDS
|
|
789
789
|
|
|
790
790
|
|
|
791
|
+
def write_test_output_file(assignment_id: str, output: str) -> Path | None:
|
|
792
|
+
"""Best-effort persist of *output* to ``COORD_DIR/test_output/<assignment_id>.txt``.
|
|
793
|
+
|
|
794
|
+
This is the one dedicated channel for quoting raw worker-/suite-authored
|
|
795
|
+
text back to a fix worker: ``coord fix`` (:mod:`coord.commands.plan_followup`)
|
|
796
|
+
prefers reading this file over every other evidence source, and —
|
|
797
|
+
critically — ``test_reason`` does not: that column is scanned by several
|
|
798
|
+
unanchored regex readers (:func:`coord.state.classify_failure` on every
|
|
799
|
+
``test_state="failed"`` write, the smoke budget tallies in
|
|
800
|
+
:mod:`coord.smoke`) that must never see raw log prose, only the
|
|
801
|
+
coordinator's own one-line summaries. Anything longer than a headline
|
|
802
|
+
belongs here, not in ``test_reason``.
|
|
803
|
+
|
|
804
|
+
*assignment_id* is the parent **work** row's id (the one a fix leg is
|
|
805
|
+
spawned from), not a confirming/smoke transition's id — the same key
|
|
806
|
+
:func:`coord.commands.plan_followup.fix` reads back by.
|
|
807
|
+
|
|
808
|
+
A no-op, returning ``None``, when there is nothing to write or when the
|
|
809
|
+
write itself fails (a read-only ``COORD_DIR``, a full disk, ...); callers
|
|
810
|
+
treat this as best-effort and must never let it break verdict recording.
|
|
811
|
+
"""
|
|
812
|
+
if not output:
|
|
813
|
+
return None
|
|
814
|
+
from coord.state import COORD_DIR # noqa: PLC0415
|
|
815
|
+
|
|
816
|
+
try:
|
|
817
|
+
test_output_dir = COORD_DIR / "test_output"
|
|
818
|
+
test_output_dir.mkdir(parents=True, exist_ok=True)
|
|
819
|
+
stored = test_output_dir / f"{assignment_id}.txt"
|
|
820
|
+
stored.write_text(output)
|
|
821
|
+
except OSError:
|
|
822
|
+
return None
|
|
823
|
+
return stored
|
|
824
|
+
|
|
825
|
+
|
|
791
826
|
def write_confirmation_output(assignment_id: str, result: ConfirmationResult) -> Path | None:
|
|
792
827
|
"""Persist a confirmation run's captured output tail for the fix briefing (#2563).
|
|
793
828
|
|
|
@@ -802,29 +837,13 @@ def write_confirmation_output(assignment_id: str, result: ConfirmationResult) ->
|
|
|
802
837
|
failing test names, no tracebacks, and had to re-derive the diagnosis the
|
|
803
838
|
daemon already held in memory.
|
|
804
839
|
|
|
805
|
-
*assignment_id* is the parent **work** row's id (the one the fix leg is
|
|
806
|
-
spawned from), not the confirming smoke transition's id — same key
|
|
807
|
-
:func:`coord.commands.plan_followup.fix` reads back by.
|
|
808
|
-
|
|
809
840
|
A no-op, returning ``None``, when there is nothing to write (``KIND_OK``
|
|
810
841
|
and ``KIND_SETUP`` both carry an empty ``.output`` — the former because
|
|
811
842
|
nothing failed, the latter because no command ever ran) or when the write
|
|
812
|
-
itself fails
|
|
813
|
-
|
|
814
|
-
:mod:`coord.notify` treats it as best-effort.
|
|
843
|
+
itself fails; see :func:`write_test_output_file`, which does the actual
|
|
844
|
+
work.
|
|
815
845
|
"""
|
|
816
|
-
|
|
817
|
-
return None
|
|
818
|
-
from coord.state import COORD_DIR # noqa: PLC0415
|
|
819
|
-
|
|
820
|
-
try:
|
|
821
|
-
test_output_dir = COORD_DIR / "test_output"
|
|
822
|
-
test_output_dir.mkdir(parents=True, exist_ok=True)
|
|
823
|
-
stored = test_output_dir / f"{assignment_id}.txt"
|
|
824
|
-
stored.write_text(result.output)
|
|
825
|
-
except OSError:
|
|
826
|
-
return None
|
|
827
|
-
return stored
|
|
846
|
+
return write_test_output_file(assignment_id, result.output)
|
|
828
847
|
|
|
829
848
|
|
|
830
849
|
def confirmation_enabled(config=None) -> bool:
|
|
@@ -1155,7 +1155,16 @@ def retry_on_locked(
|
|
|
1155
1155
|
# request-changes rates between workflow and single legs over a sample of
|
|
1156
1156
|
# issues BEFORE anyone considers relaxing Test/Review for workflow legs —
|
|
1157
1157
|
# a separate, later decision this column only supplies the data for.
|
|
1158
|
-
|
|
1158
|
+
#
|
|
1159
|
+
# #3754: bumped 24 -> 25 for the new `merge_queue.ci_rerun_budget_sha` column
|
|
1160
|
+
# appended to `_MIGRATE_ADD_COLUMNS` below — the `branch_head_sha` that
|
|
1161
|
+
# `ci_infra_reruns`/`ci_flaky_reruns`/`ci_unreadable_reruns`/`ci_flaky_pending`
|
|
1162
|
+
# were last accrued against, same pairing shape as #3263's `ci_seen_checks_
|
|
1163
|
+
# sha`. Lets a new commit landing while CI is still red (a ci-fix leg's own
|
|
1164
|
+
# push, most commonly) re-arm those budgets for its own fair rerun-once
|
|
1165
|
+
# chance instead of inheriting an already-exhausted count from an unrelated
|
|
1166
|
+
# prior commit. See `coord.merge_queue.QueuedMerge.ci_rerun_budget_sha`.
|
|
1167
|
+
_DB_SCHEMA_VERSION = 25
|
|
1159
1168
|
|
|
1160
1169
|
|
|
1161
1170
|
def _read_schema_version(conn: sqlite3.Connection) -> int:
|
|
@@ -1403,7 +1412,8 @@ _SCHEMA_SQL = """
|
|
|
1403
1412
|
ci_fix_detail_sha TEXT NOT NULL DEFAULT '',
|
|
1404
1413
|
ci_fix_detail_json TEXT,
|
|
1405
1414
|
ci_seen_checks_sha TEXT NOT NULL DEFAULT '',
|
|
1406
|
-
ci_seen_check_names_json TEXT
|
|
1415
|
+
ci_seen_check_names_json TEXT,
|
|
1416
|
+
ci_rerun_budget_sha TEXT NOT NULL DEFAULT ''
|
|
1407
1417
|
);
|
|
1408
1418
|
|
|
1409
1419
|
CREATE TABLE IF NOT EXISTS plans (
|
|
@@ -2640,6 +2650,16 @@ _MIGRATE_ADD_COLUMNS: list[str] = [
|
|
|
2640
2650
|
# commit" by `coord.merge_queue._ci_seen_check_names`.
|
|
2641
2651
|
"ALTER TABLE merge_queue ADD COLUMN ci_seen_checks_sha TEXT NOT NULL DEFAULT ''",
|
|
2642
2652
|
"ALTER TABLE merge_queue ADD COLUMN ci_seen_check_names_json TEXT",
|
|
2653
|
+
# #3754: the `branch_head_sha` that `ci_infra_reruns`/`ci_flaky_reruns`/
|
|
2654
|
+
# `ci_unreadable_reruns`/`ci_flaky_pending` were last accrued against --
|
|
2655
|
+
# see `coord.merge_queue.QueuedMerge.ci_rerun_budget_sha`'s docstring.
|
|
2656
|
+
# Lets a new commit landing while CI is still red (a ci-fix leg's own
|
|
2657
|
+
# push, most commonly) re-arm those rerun budgets for its own fair
|
|
2658
|
+
# rerun-once chance instead of inheriting an already-exhausted count
|
|
2659
|
+
# from an unrelated prior commit. '' for every row predating this
|
|
2660
|
+
# migration, read identically to "no live CI-failure read yet" by
|
|
2661
|
+
# `coord.merge_queue.MergeQueue.process`.
|
|
2662
|
+
"ALTER TABLE merge_queue ADD COLUMN ci_rerun_budget_sha TEXT NOT NULL DEFAULT ''",
|
|
2643
2663
|
# #3339: the explicit operator assertion that clears a terminal
|
|
2644
2664
|
# `refused_premise` row — see `coord.state.mark_premise_rechecked` and
|
|
2645
2665
|
# `coord drive-queue clear-refusal`. Unlike `refused_policy`, a premise
|
|
@@ -4897,6 +4897,23 @@ class QueuedMerge:
|
|
|
4897
4897
|
# is nothing to contradict on the very first read of a fresh SHA.
|
|
4898
4898
|
ci_seen_checks_sha: str = ""
|
|
4899
4899
|
ci_seen_check_names_json: str | None = None
|
|
4900
|
+
# #3754: `branch_head_sha` (see the field above) that `ci_infra_reruns`/
|
|
4901
|
+
# `ci_flaky_reruns`/`ci_unreadable_reruns`/`ci_flaky_pending` were last
|
|
4902
|
+
# accrued against. Those four durable fields used to be reset ONLY in
|
|
4903
|
+
# the "genuinely resolved" block below (reached only once CI reads
|
|
4904
|
+
# fully green) — so a NEW commit landing while CI is STILL red (most
|
|
4905
|
+
# commonly a ci-fix leg's own push) inherited whatever was left of the
|
|
4906
|
+
# PRIOR commit's budget instead of getting its own fair rerun-once
|
|
4907
|
+
# chance. That silently turned a single flaky required check into two
|
|
4908
|
+
# consecutive `checks_failed` verdicts back to back, burning the
|
|
4909
|
+
# #2972 fix-round ceiling on a PR nothing was actually wrong with.
|
|
4910
|
+
# Compared against `branch_head_sha` at the top of the `if failed:`
|
|
4911
|
+
# block below: a mismatch re-arms all four fields for the new commit
|
|
4912
|
+
# before any of #2347/#1892/#2252's own budget checks run, mirroring
|
|
4913
|
+
# the `ci_seen_checks_sha` pairing immediately above. '' for every
|
|
4914
|
+
# entry that has never had a live CI-failure read, and for rows
|
|
4915
|
+
# predating this column.
|
|
4916
|
+
ci_rerun_budget_sha: str = ""
|
|
4900
4917
|
|
|
4901
4918
|
|
|
4902
4919
|
class GhOps(Protocol):
|
|
@@ -5308,6 +5325,9 @@ def load_queue() -> list[QueuedMerge]:
|
|
|
5308
5325
|
# ci_fix_detail_json above, for rows predating this migration.
|
|
5309
5326
|
ci_seen_checks_sha=row["ci_seen_checks_sha"] or "",
|
|
5310
5327
|
ci_seen_check_names_json=row["ci_seen_check_names_json"],
|
|
5328
|
+
# #3754: same NULL-to-'' decoding as ci_seen_checks_sha above,
|
|
5329
|
+
# for rows predating this migration.
|
|
5330
|
+
ci_rerun_budget_sha=row["ci_rerun_budget_sha"] or "",
|
|
5311
5331
|
)
|
|
5312
5332
|
for row in rows
|
|
5313
5333
|
]
|
|
@@ -5332,8 +5352,9 @@ def save_queue(items: list[QueuedMerge]) -> None:
|
|
|
5332
5352
|
ci_unreadable_reruns, ci_fix_dispatches,
|
|
5333
5353
|
ci_fix_head_sha, ci_fix_noop_streak,
|
|
5334
5354
|
ci_fix_detail_sha, ci_fix_detail_json,
|
|
5335
|
-
ci_seen_checks_sha, ci_seen_check_names_json
|
|
5336
|
-
|
|
5355
|
+
ci_seen_checks_sha, ci_seen_check_names_json,
|
|
5356
|
+
ci_rerun_budget_sha
|
|
5357
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
|
5337
5358
|
(
|
|
5338
5359
|
item.assignment_id, item.repo_name, item.repo_github,
|
|
5339
5360
|
item.branch, item.target_branch, item.issue_number,
|
|
@@ -5346,6 +5367,7 @@ def save_queue(items: list[QueuedMerge]) -> None:
|
|
|
5346
5367
|
item.ci_fix_head_sha, item.ci_fix_noop_streak,
|
|
5347
5368
|
item.ci_fix_detail_sha, item.ci_fix_detail_json,
|
|
5348
5369
|
item.ci_seen_checks_sha, item.ci_seen_check_names_json,
|
|
5370
|
+
item.ci_rerun_budget_sha,
|
|
5349
5371
|
),
|
|
5350
5372
|
)
|
|
5351
5373
|
|
|
@@ -9036,6 +9058,25 @@ def process(
|
|
|
9036
9058
|
summary = ", ".join(
|
|
9037
9059
|
f"{c.name} ({c.conclusion})" for c in failed
|
|
9038
9060
|
)
|
|
9061
|
+
# #3754: a NEW commit landing while CI is still red
|
|
9062
|
+
# (most commonly a ci-fix leg's own push) must get its
|
|
9063
|
+
# own fair rerun-once chance, not inherit whatever is
|
|
9064
|
+
# left of a DIFFERENT, prior commit's budget — the
|
|
9065
|
+
# "genuinely resolved" reset later in this function only
|
|
9066
|
+
# fires once CI reads fully green, which a still-broken
|
|
9067
|
+
# (or still-flaky) new commit never reaches. Guarded on
|
|
9068
|
+
# `branch_head_sha` being known at all: an unknown SHA
|
|
9069
|
+
# carries no information either way, so leave the
|
|
9070
|
+
# existing budget alone rather than reset against "".
|
|
9071
|
+
if (
|
|
9072
|
+
entry.branch_head_sha
|
|
9073
|
+
and entry.branch_head_sha != entry.ci_rerun_budget_sha
|
|
9074
|
+
):
|
|
9075
|
+
entry.ci_infra_reruns = 0
|
|
9076
|
+
entry.ci_flaky_reruns = 0
|
|
9077
|
+
entry.ci_flaky_pending = ""
|
|
9078
|
+
entry.ci_unreadable_reruns = 0
|
|
9079
|
+
entry.ci_rerun_budget_sha = entry.branch_head_sha
|
|
9039
9080
|
# #2347: classify a bare check-list FETCH failure
|
|
9040
9081
|
# BEFORE #1892's infra classifier gets a chance — a
|
|
9041
9082
|
# synthetic unreadable check always carries `run_id ==
|
|
@@ -9320,6 +9361,12 @@ def process(
|
|
|
9320
9361
|
# failures the budget was tracking is over. A LATER,
|
|
9321
9362
|
# unrelated fetch failure starts its own count from zero.
|
|
9322
9363
|
entry.ci_unreadable_reruns = 0
|
|
9364
|
+
# #3754: keep `ci_rerun_budget_sha` in lockstep with the
|
|
9365
|
+
# three counters above — harmless if it's already current
|
|
9366
|
+
# (the `if failed:` guard above is idempotent), but keeps a
|
|
9367
|
+
# later failure on this SAME sha (a flaky green-then-read)
|
|
9368
|
+
# from being misread as stale tracking.
|
|
9369
|
+
entry.ci_rerun_budget_sha = entry.branch_head_sha or ""
|
|
9323
9370
|
# #1851: a green CI result can itself be stale relative to the
|
|
9324
9371
|
# base — see `_ci_checks_are_stale`'s docstring. Named
|
|
9325
9372
|
# distinctly (`checks_stale`) from checks_failed/
|
|
@@ -3280,14 +3280,38 @@ def _record_smoke_verdict(
|
|
|
3280
3280
|
# `test_state`, so a headless smoke FAILURE lands as
|
|
3281
3281
|
# test_state='failed' AND smoke_test='fail' and stays reachable from
|
|
3282
3282
|
# `coord fix`.
|
|
3283
|
+
#
|
|
3284
|
+
# A plain-runner's marker line (`SMOKE: fail exit=1`) carries nothing
|
|
3285
|
+
# but an exit code — useless to a fix worker who can't tell its own
|
|
3286
|
+
# diff from a red base from that alone. `verdict.context` is the
|
|
3287
|
+
# bounded log tail that preceded the marker, which for the
|
|
3288
|
+
# plain-runner is the captured failing-test output (panic/assertion
|
|
3289
|
+
# lines, the `error: test failed, to rerun pass -p <crate> --test
|
|
3290
|
+
# <name>` hint), and for a `claude -p` smoke worker is usually the
|
|
3291
|
+
# turn where it identified the failure.
|
|
3292
|
+
#
|
|
3293
|
+
# That text is raw worker-/suite-authored prose, so it goes to the
|
|
3294
|
+
# dedicated `test_output` file (`coord.confirm_test.
|
|
3295
|
+
# write_test_output_file`), never into `test_reason` itself —
|
|
3296
|
+
# `test_reason` is scanned unanchored by several readers
|
|
3297
|
+
# (`coord.state.classify_failure` on every failed write,
|
|
3298
|
+
# `coord.smoke`'s budget tallies) that must only ever see the
|
|
3299
|
+
# coordinator's own short summary, not a worker's log output which
|
|
3300
|
+
# could coincidentally contain one of their matched phrases.
|
|
3301
|
+
# `plan_followup.fix()` already prefers this file over `test_reason`
|
|
3302
|
+
# when composing the briefing.
|
|
3303
|
+
from coord.confirm_test import write_test_output_file # noqa: PLC0415
|
|
3304
|
+
|
|
3305
|
+
write_test_output_file(parent_id, verdict.context)
|
|
3306
|
+
headline = (
|
|
3307
|
+
f"headless smoke: {verdict.reason}"
|
|
3308
|
+
if verdict.reason
|
|
3309
|
+
else "headless smoke reported SMOKE: fail"
|
|
3310
|
+
)
|
|
3283
3311
|
record_test_verdict(
|
|
3284
3312
|
assignment_id=parent_id,
|
|
3285
3313
|
test_state="failed",
|
|
3286
|
-
test_reason=
|
|
3287
|
-
f"headless smoke: {verdict.reason}"
|
|
3288
|
-
if verdict.reason
|
|
3289
|
-
else "headless smoke reported SMOKE: fail"
|
|
3290
|
-
),
|
|
3314
|
+
test_reason=headline,
|
|
3291
3315
|
)
|
|
3292
3316
|
return
|
|
3293
3317
|
|
|
@@ -90,11 +90,22 @@ class SmokeVerdict:
|
|
|
90
90
|
"""#2244: a smoke worker's self-reported verdict line.
|
|
91
91
|
|
|
92
92
|
``kind`` is normalised to exactly one of ``"pass"``, ``"fail"`` or
|
|
93
|
-
``"baseline-red"``; ``reason`` is the (possibly empty) trailing text
|
|
93
|
+
``"baseline-red"``; ``reason`` is the (possibly empty) trailing text on
|
|
94
|
+
the marker's own line.
|
|
95
|
+
|
|
96
|
+
``context`` is a bounded tail (:func:`coord.revalidate._tail`) of
|
|
97
|
+
whatever text preceded the marker — a plain-runner writes its captured
|
|
98
|
+
test output immediately before `SMOKE: fail exit=N`, and a `claude -p`
|
|
99
|
+
smoke worker usually states the failing test/assertion in the same turn
|
|
100
|
+
it prints the marker. This is raw worker-authored text, not a short
|
|
101
|
+
summary: callers must route it to a channel meant for that (e.g.
|
|
102
|
+
`coord.confirm_test.write_test_output_file`), never append it to a
|
|
103
|
+
structured field like `test_reason`.
|
|
94
104
|
"""
|
|
95
105
|
|
|
96
106
|
kind: str
|
|
97
107
|
reason: str = ""
|
|
108
|
+
context: str = ""
|
|
98
109
|
|
|
99
110
|
|
|
100
111
|
@dataclass
|
|
@@ -484,17 +495,27 @@ def _extract_smoke_verdict_from_text(text: str) -> "SmokeVerdict | None":
|
|
|
484
495
|
itself — "I said baseline-red, but re-running shows a real failure")
|
|
485
496
|
means the final line, not the first.
|
|
486
497
|
"""
|
|
498
|
+
from coord.revalidate import _tail # noqa: PLC0415
|
|
499
|
+
|
|
487
500
|
matches = list(_SMOKE_VERDICT_RE.finditer(text))
|
|
488
501
|
if not matches:
|
|
489
502
|
return None
|
|
490
|
-
|
|
503
|
+
last = matches[-1]
|
|
504
|
+
raw_kind = last.group(1).lower()
|
|
491
505
|
if raw_kind.startswith("baseline"):
|
|
492
506
|
kind = "baseline-red"
|
|
493
507
|
elif raw_kind.startswith("pass"):
|
|
494
508
|
kind = "pass"
|
|
495
509
|
else:
|
|
496
510
|
kind = "fail"
|
|
497
|
-
|
|
511
|
+
# Whatever preceded the marker line, bounded the same way
|
|
512
|
+
# `coord.revalidate`'s own failure tails are. `text[:last.start()]` not
|
|
513
|
+
# `.end()` — the marker line itself (e.g. `SMOKE: fail exit=1`) is
|
|
514
|
+
# already captured as `reason` and would just duplicate here.
|
|
515
|
+
preceding = _tail(text[: last.start()])
|
|
516
|
+
return SmokeVerdict(
|
|
517
|
+
kind=kind, reason=last.group(2).strip(), context=preceding,
|
|
518
|
+
)
|
|
498
519
|
|
|
499
520
|
|
|
500
521
|
def _smoke_verdict_texts_from_event(event: object) -> list[str]:
|
|
@@ -594,6 +594,46 @@ class TestFixFromRedCi:
|
|
|
594
594
|
|
|
595
595
|
assert result.exit_code == 0, result.output
|
|
596
596
|
|
|
597
|
+
def test_test_output_file_content_reaches_the_rendered_briefing(
|
|
598
|
+
self, ci_config: Path, coord_dir: Path, monkeypatch
|
|
599
|
+
) -> None:
|
|
600
|
+
"""`fix()`'s `elif test_output_file.exists()` branch wins over
|
|
601
|
+
`test_reason` — pin that the file's content, not just its
|
|
602
|
+
existence, actually lands in the rendered `## Test failure`
|
|
603
|
+
section a fix worker reads."""
|
|
604
|
+
work = _work(test_state="failed", test_reason="exit=1")
|
|
605
|
+
state_mod.save_board(Board(completed=[work]))
|
|
606
|
+
|
|
607
|
+
def boom(*a, **k):
|
|
608
|
+
raise AssertionError("CI must not be consulted when the test gate failed")
|
|
609
|
+
|
|
610
|
+
monkeypatch.setattr("coord.ci_store.build_ci_store", boom)
|
|
611
|
+
|
|
612
|
+
test_output_dir = coord_dir / "test_output"
|
|
613
|
+
test_output_dir.mkdir(parents=True, exist_ok=True)
|
|
614
|
+
(test_output_dir / "work-abc.txt").write_text(
|
|
615
|
+
"FAILED tests/readme_truth.rs::version_matches\n"
|
|
616
|
+
"error: test failed, to rerun pass -p vimcode --test readme_truth\n"
|
|
617
|
+
"SMOKE: fail exit=1\n"
|
|
618
|
+
)
|
|
619
|
+
|
|
620
|
+
captured = {}
|
|
621
|
+
|
|
622
|
+
def fake_dispatch(proposal, config, **kwargs):
|
|
623
|
+
captured["briefing"] = proposal.briefing
|
|
624
|
+
return {"id": "fix-t"}
|
|
625
|
+
|
|
626
|
+
with patch("coord.dispatch.dispatch", side_effect=fake_dispatch), \
|
|
627
|
+
patch("coord.github_ops.post_issue_comment"):
|
|
628
|
+
result = CliRunner().invoke(
|
|
629
|
+
main, ["fix", "work-abc", "--config", str(ci_config)]
|
|
630
|
+
)
|
|
631
|
+
|
|
632
|
+
assert result.exit_code == 0, result.output
|
|
633
|
+
assert "## Test failure" in captured["briefing"]
|
|
634
|
+
assert "FAILED tests/readme_truth.rs::version_matches" in captured["briefing"]
|
|
635
|
+
assert "to rerun pass -p vimcode --test readme_truth" in captured["briefing"]
|
|
636
|
+
|
|
597
637
|
def test_dispatch_refused_by_a_pre_dispatch_guard_exits_distinctly(
|
|
598
638
|
self, ci_config: Path, coord_dir: Path, monkeypatch
|
|
599
639
|
) -> None:
|
|
@@ -2508,7 +2508,11 @@ class TestUatStateAndReasonColumns:
|
|
|
2508
2508
|
# `review_claims` / #3333's `smoke_claims` bumps above. Closes the race where
|
|
2509
2509
|
# the live review-completion path and the orphan sweep both see
|
|
2510
2510
|
# `review_posted_at IS NULL` and both post the identical GitHub comment.
|
|
2511
|
-
|
|
2511
|
+
# #3754 bumped this to (25, 101): `merge_queue.ci_rerun_budget_sha` — the
|
|
2512
|
+
# `branch_head_sha` the CI-flaky/infra/unreadable rerun budgets were last
|
|
2513
|
+
# accrued against, so a new commit landing while CI is still red gets its
|
|
2514
|
+
# own fair rerun-once chance instead of inheriting an exhausted budget.
|
|
2515
|
+
_PINNED_SCHEMA_VERSION_AND_MIGRATION_COUNT = (25, 101)
|
|
2512
2516
|
|
|
2513
2517
|
|
|
2514
2518
|
class TestMigrateAddColumnsVersionGuard:
|
|
@@ -11703,6 +11703,109 @@ class TestProcessCiFlakyAutoRerun:
|
|
|
11703
11703
|
assert "ci_flaky_rerun" not in kinds
|
|
11704
11704
|
|
|
11705
11705
|
|
|
11706
|
+
# ── #3754: rerun budgets are scoped to the commit they were accrued for ─────
|
|
11707
|
+
|
|
11708
|
+
class TestProcessCiRerunBudgetScopedToCommit:
|
|
11709
|
+
"""A NEW ``branch_head_sha`` (a ci-fix leg's own push, most commonly)
|
|
11710
|
+
must get its own fair #2252 rerun-once chance rather than inherit
|
|
11711
|
+
whatever is left of a DIFFERENT, prior commit's exhausted budget —
|
|
11712
|
+
the repro in #3754 is exactly a ci-fix leg landing at the fix-round
|
|
11713
|
+
ceiling because its fresh push inherited an already-spent streak."""
|
|
11714
|
+
|
|
11715
|
+
def test_new_commit_after_exhausted_budget_gets_its_own_rerun(self) -> None:
|
|
11716
|
+
items = [_q("w1", pr=99)]
|
|
11717
|
+
entry = items[0]
|
|
11718
|
+
# Commit A: budget already exhausted and confirmed real (mirrors
|
|
11719
|
+
# `test_fails_again_spends_the_attempt_identical_to_today` above).
|
|
11720
|
+
entry.branch_head_sha = "sha_a"
|
|
11721
|
+
entry.ci_rerun_budget_sha = "sha_a"
|
|
11722
|
+
entry.ci_infra_reruns = mq.MAX_CI_INFRA_RERUNS
|
|
11723
|
+
entry.ci_flaky_reruns = mq.MAX_CI_FLAKY_RERUNS
|
|
11724
|
+
entry.ci_unreadable_reruns = mq.MAX_CI_UNREADABLE_RERUNS
|
|
11725
|
+
entry.ci_flaky_pending = ""
|
|
11726
|
+
|
|
11727
|
+
gh = FakeGh()
|
|
11728
|
+
ci = TestProcessCiFlakyAutoRerun._Ci(
|
|
11729
|
+
checks=TestProcessCiFlakyAutoRerun._genuine_failure()
|
|
11730
|
+
)
|
|
11731
|
+
|
|
11732
|
+
# Commit A still red -> budget exhausted, plain checks_failed,
|
|
11733
|
+
# no rerun attempted -- unchanged from today's behaviour.
|
|
11734
|
+
events = process(items, gh, ci_store=ci)
|
|
11735
|
+
kinds = [e.kind for e in events]
|
|
11736
|
+
assert "checks_failed" in kinds
|
|
11737
|
+
assert "ci_flaky_rerun" not in kinds
|
|
11738
|
+
assert ci.rerun_failed_calls == []
|
|
11739
|
+
assert entry.ci_flaky_reruns == mq.MAX_CI_FLAKY_RERUNS
|
|
11740
|
+
|
|
11741
|
+
# A new commit lands (e.g. a ci-fix leg's own push) and ALSO
|
|
11742
|
+
# fails CI -- it must get its own fresh rerun-once chance rather
|
|
11743
|
+
# than being immediately confirmed as broken from A's exhausted
|
|
11744
|
+
# budget.
|
|
11745
|
+
entry.branch_head_sha = "sha_b"
|
|
11746
|
+
events = process(items, gh, ci_store=ci)
|
|
11747
|
+
|
|
11748
|
+
kinds = [e.kind for e in events]
|
|
11749
|
+
assert "ci_flaky_rerun" in kinds
|
|
11750
|
+
assert "checks_failed" not in kinds
|
|
11751
|
+
assert ci.rerun_failed_calls == [("acme/api", 99)]
|
|
11752
|
+
assert entry.ci_infra_reruns == 0
|
|
11753
|
+
assert entry.ci_flaky_reruns == 1
|
|
11754
|
+
assert entry.ci_unreadable_reruns == 0
|
|
11755
|
+
assert entry.ci_flaky_pending
|
|
11756
|
+
assert entry.ci_rerun_budget_sha == "sha_b"
|
|
11757
|
+
|
|
11758
|
+
def test_same_commit_failing_again_keeps_the_exhausted_budget(self) -> None:
|
|
11759
|
+
"""Control: without a NEW sha, the existing exhausted-budget
|
|
11760
|
+
behaviour (today's `checks_failed` on a repeat failure) is
|
|
11761
|
+
unchanged — the reset is scoped to a genuinely new commit, not
|
|
11762
|
+
every tick."""
|
|
11763
|
+
items = [_q("w1", pr=99)]
|
|
11764
|
+
entry = items[0]
|
|
11765
|
+
entry.branch_head_sha = "sha_a"
|
|
11766
|
+
entry.ci_rerun_budget_sha = "sha_a"
|
|
11767
|
+
entry.ci_flaky_reruns = mq.MAX_CI_FLAKY_RERUNS
|
|
11768
|
+
entry.ci_flaky_pending = ""
|
|
11769
|
+
|
|
11770
|
+
gh = FakeGh()
|
|
11771
|
+
ci = TestProcessCiFlakyAutoRerun._Ci(
|
|
11772
|
+
checks=TestProcessCiFlakyAutoRerun._genuine_failure()
|
|
11773
|
+
)
|
|
11774
|
+
|
|
11775
|
+
events = process(items, gh, ci_store=ci)
|
|
11776
|
+
|
|
11777
|
+
kinds = [e.kind for e in events]
|
|
11778
|
+
assert "checks_failed" in kinds
|
|
11779
|
+
assert "ci_flaky_rerun" not in kinds
|
|
11780
|
+
assert ci.rerun_failed_calls == []
|
|
11781
|
+
assert entry.ci_flaky_reruns == mq.MAX_CI_FLAKY_RERUNS
|
|
11782
|
+
assert entry.ci_rerun_budget_sha == "sha_a"
|
|
11783
|
+
|
|
11784
|
+
def test_unknown_branch_head_sha_does_not_reset_the_budget(self) -> None:
|
|
11785
|
+
"""An unknown sha (``board=None``, the dry-preview path with no
|
|
11786
|
+
live `gh` fetch) carries no information either way -- leave the
|
|
11787
|
+
existing budget alone rather than reset against ``""``."""
|
|
11788
|
+
items = [_q("w1", pr=99)]
|
|
11789
|
+
entry = items[0]
|
|
11790
|
+
entry.branch_head_sha = None
|
|
11791
|
+
entry.ci_rerun_budget_sha = "sha_a"
|
|
11792
|
+
entry.ci_flaky_reruns = mq.MAX_CI_FLAKY_RERUNS
|
|
11793
|
+
entry.ci_flaky_pending = ""
|
|
11794
|
+
|
|
11795
|
+
gh = FakeGh()
|
|
11796
|
+
ci = TestProcessCiFlakyAutoRerun._Ci(
|
|
11797
|
+
checks=TestProcessCiFlakyAutoRerun._genuine_failure()
|
|
11798
|
+
)
|
|
11799
|
+
|
|
11800
|
+
events = process(items, gh, ci_store=ci)
|
|
11801
|
+
|
|
11802
|
+
kinds = [e.kind for e in events]
|
|
11803
|
+
assert "checks_failed" in kinds
|
|
11804
|
+
assert "ci_flaky_rerun" not in kinds
|
|
11805
|
+
assert entry.ci_flaky_reruns == mq.MAX_CI_FLAKY_RERUNS
|
|
11806
|
+
assert entry.ci_rerun_budget_sha == "sha_a"
|
|
11807
|
+
|
|
11808
|
+
|
|
11706
11809
|
# ── #778: staging_items() ─────────────────────────────────────────────────────
|
|
11707
11810
|
|
|
11708
11811
|
class TestStagingItems:
|
|
@@ -3410,6 +3410,14 @@ class TestSmokeVerdictFailsClosed(TestSmokeCompletionVerdict):
|
|
|
3410
3410
|
'{"type":"result","subtype":"success","result":"The suite failed."}\n'
|
|
3411
3411
|
)
|
|
3412
3412
|
|
|
3413
|
+
@pytest.fixture(autouse=True)
|
|
3414
|
+
def _isolated_coord_dir(self, tmp_path, monkeypatch):
|
|
3415
|
+
"""A `fail` verdict with non-empty preceding context writes it to
|
|
3416
|
+
`COORD_DIR/test_output/<assignment_id>.txt`
|
|
3417
|
+
(`coord.confirm_test.write_test_output_file`) — point `COORD_DIR` at
|
|
3418
|
+
this test's own `tmp_path` rather than a real one."""
|
|
3419
|
+
monkeypatch.setattr("coord.state.COORD_DIR", tmp_path / "coord-dir")
|
|
3420
|
+
|
|
3413
3421
|
def _reap(self, transition, record, entry) -> None:
|
|
3414
3422
|
from coord.notify import post_transition # noqa: PLC0415
|
|
3415
3423
|
|
|
@@ -3473,6 +3481,52 @@ class TestSmokeVerdictFailsClosed(TestSmokeCompletionVerdict):
|
|
|
3473
3481
|
assert row["smoke_test"] == "fail"
|
|
3474
3482
|
assert "5 failed" in (row["test_reason"] or "")
|
|
3475
3483
|
|
|
3484
|
+
def test_plain_runner_failure_threads_log_context_into_test_output_file(
|
|
3485
|
+
self, coord_db, tmp_path,
|
|
3486
|
+
) -> None:
|
|
3487
|
+
"""A plain-runner log has NOTHING but `exit=N` on the `SMOKE: fail`
|
|
3488
|
+
line itself — the failing test name and rerun hint are only in the
|
|
3489
|
+
captured output that precedes it. That context must reach a fix
|
|
3490
|
+
worker via `COORD_DIR/test_output/<assignment_id>.txt`
|
|
3491
|
+
(`coord.commands.plan_followup.fix` reads this file ahead of
|
|
3492
|
+
`test_reason`), not via `test_reason` itself — `test_reason` stays a
|
|
3493
|
+
short, coordinator-authored headline because several readers
|
|
3494
|
+
(`coord.state.classify_failure`, `coord.smoke`'s budget tallies)
|
|
3495
|
+
scan it with unanchored regexes that must never see raw log text."""
|
|
3496
|
+
plain_runner_log = (
|
|
3497
|
+
"FAILED tests/readme_truth.rs::version_matches\n"
|
|
3498
|
+
"error: test failed, to rerun pass -p vimcode --test readme_truth\n"
|
|
3499
|
+
"SMOKE: fail exit=1\n"
|
|
3500
|
+
)
|
|
3501
|
+
transition, record, entry = self._setup(
|
|
3502
|
+
"work-3741", "smoke-3741", exit_code=1,
|
|
3503
|
+
log=plain_runner_log, tmp_path=tmp_path,
|
|
3504
|
+
)
|
|
3505
|
+
self._reap(transition, record, entry)
|
|
3506
|
+
|
|
3507
|
+
row = self._row("work-3741")
|
|
3508
|
+
assert row is not None
|
|
3509
|
+
assert row["test_state"] == "failed"
|
|
3510
|
+
reason = row["test_reason"] or ""
|
|
3511
|
+
assert "exit=1" in reason
|
|
3512
|
+
assert "FAILED tests/readme_truth.rs::version_matches" not in reason, (
|
|
3513
|
+
"raw log text must not land in test_reason — it is scanned "
|
|
3514
|
+
f"unanchored by several readers; got {reason!r}"
|
|
3515
|
+
)
|
|
3516
|
+
|
|
3517
|
+
from coord.state import COORD_DIR # noqa: PLC0415
|
|
3518
|
+
|
|
3519
|
+
stored = COORD_DIR / "test_output" / "work-3741.txt"
|
|
3520
|
+
assert stored.exists(), (
|
|
3521
|
+
f"expected the captured context at {stored} for `coord fix` to read"
|
|
3522
|
+
)
|
|
3523
|
+
context = stored.read_text()
|
|
3524
|
+
assert "FAILED tests/readme_truth.rs::version_matches" in context, (
|
|
3525
|
+
"a bare 'headless smoke: exit=1' tells a fix worker nothing — "
|
|
3526
|
+
f"the failing test name must survive into the file; got {context!r}"
|
|
3527
|
+
)
|
|
3528
|
+
assert "to rerun pass -p vimcode --test readme_truth" in context
|
|
3529
|
+
|
|
3476
3530
|
def test_clean_exit_without_verdict_records_no_verdict(
|
|
3477
3531
|
self, coord_db, tmp_path
|
|
3478
3532
|
) -> None:
|
|
@@ -584,6 +584,60 @@ class TestSmokeVerdictParser:
|
|
|
584
584
|
assert v is not None and v.kind == "fail"
|
|
585
585
|
assert v.reason == "5 failed + 3 errors"
|
|
586
586
|
|
|
587
|
+
def test_fail_captures_preceding_output_as_context(
|
|
588
|
+
self, tmp_path: Path,
|
|
589
|
+
) -> None:
|
|
590
|
+
"""A plain-runner's captured test output precedes its
|
|
591
|
+
`SMOKE: fail exit=N` marker — that's exactly what a fix briefing
|
|
592
|
+
needs quoted, not just the marker's own trailing text."""
|
|
593
|
+
from coord.progress import parse_smoke_verdict_from_log
|
|
594
|
+
v = parse_smoke_verdict_from_log(
|
|
595
|
+
self._log(
|
|
596
|
+
tmp_path,
|
|
597
|
+
"FAILED tests/readme_truth.rs::version_matches\n"
|
|
598
|
+
"error: test failed, to rerun pass -p vimcode "
|
|
599
|
+
"--test readme_truth\n"
|
|
600
|
+
"SMOKE: fail exit=1\n",
|
|
601
|
+
)
|
|
602
|
+
)
|
|
603
|
+
assert v is not None and v.kind == "fail"
|
|
604
|
+
assert v.reason == "exit=1"
|
|
605
|
+
assert "FAILED tests/readme_truth.rs::version_matches" in v.context
|
|
606
|
+
assert "to rerun pass -p vimcode --test readme_truth" in v.context
|
|
607
|
+
# The marker line itself is `reason`'s job, not duplicated here — for
|
|
608
|
+
# THIS single-marker fixture it also means the marker text itself
|
|
609
|
+
# doesn't appear in `.context`. That is not a general invariant: a
|
|
610
|
+
# stream-json log can carry the `SMOKE:` string multiple times (the
|
|
611
|
+
# tool_use command, the echoed literal, the tool_result), and an
|
|
612
|
+
# earlier copy legitimately ends up inside `.context`.
|
|
613
|
+
assert "SMOKE: fail" not in v.context
|
|
614
|
+
|
|
615
|
+
def test_context_is_truncated_from_the_front_when_oversized(
|
|
616
|
+
self, tmp_path: Path,
|
|
617
|
+
) -> None:
|
|
618
|
+
"""Mirrors `coord.revalidate._tail`'s bias: keep the END of the
|
|
619
|
+
preceding output (closest to the failure) and mark the cut."""
|
|
620
|
+
from coord.progress import parse_smoke_verdict_from_log
|
|
621
|
+
from coord.revalidate import _OUTPUT_TAIL_CHARS
|
|
622
|
+
huge = "x" * 5000 + "TAIL-MARKER-END"
|
|
623
|
+
v = parse_smoke_verdict_from_log(
|
|
624
|
+
self._log(tmp_path, f"{huge}\nSMOKE: fail exit=1\n")
|
|
625
|
+
)
|
|
626
|
+
assert v is not None and v.kind == "fail"
|
|
627
|
+
assert "…(truncated)…" in v.context
|
|
628
|
+
assert "TAIL-MARKER-END" in v.context
|
|
629
|
+
assert len(v.context) < _OUTPUT_TAIL_CHARS + 100
|
|
630
|
+
|
|
631
|
+
def test_pass_has_no_context_requirement(self, tmp_path: Path) -> None:
|
|
632
|
+
"""A pass verdict doesn't need preceding output explained; just
|
|
633
|
+
confirm populating `.context` for `pass` doesn't break anything."""
|
|
634
|
+
from coord.progress import parse_smoke_verdict_from_log
|
|
635
|
+
v = parse_smoke_verdict_from_log(
|
|
636
|
+
self._log(tmp_path, "9911 passed in 662s\nSMOKE: pass\n")
|
|
637
|
+
)
|
|
638
|
+
assert v is not None and v.kind == "pass"
|
|
639
|
+
assert v.context == "9911 passed in 662s"
|
|
640
|
+
|
|
587
641
|
def test_parses_baseline_red(self, tmp_path: Path) -> None:
|
|
588
642
|
from coord.progress import parse_smoke_verdict_from_log
|
|
589
643
|
v = parse_smoke_verdict_from_log(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|