code-coordinator 0.5.656__tar.gz → 0.5.658__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.656 → code_coordinator-0.5.658}/PKG-INFO +1 -1
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/PKG-INFO +1 -1
- code_coordinator-0.5.658/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dead_end.py +26 -2
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/diagnose.py +32 -7
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notify.py +67 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/review.py +91 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/smoke.py +85 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/state.py +30 -7
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dead_end.py +31 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_diagnose.py +25 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_fix.py +29 -1
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notify.py +140 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke.py +40 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_state.py +49 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_verdict_parsing.py +82 -1
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_throwaway_vm.py +120 -30
- code_coordinator-0.5.656/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/.gitignore +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/CLAUDE.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/GOAL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/LICENSE +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/MANIFEST.in +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/README.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/__init__.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agent.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/app_drive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/app_drive_daemon.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/audit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/backup.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/block_log.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/board_service.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/brain.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/briefing_lessons.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/claim.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/cli.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/client.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/codegen.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/app_drive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/smoke.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/comments.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/config.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dao.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/db.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/deps.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/drive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/events.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/filelock.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/freshness.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gates.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/goal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/gui_lane_preflight.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/context.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/models.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/render.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/health/units.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/hooks.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/interactive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/key_spec.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/models.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/native_fs_wait.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/native_pixels.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/network.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/nightly_runner.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/nightly_smoke.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/nightly_status.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/nightly_store.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/openapi.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/parentage.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/plans.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/prereview_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/progress.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/release_window.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/reports.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/self_health.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/shell_exec_wrap.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/split_work.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/sql.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/test_author.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/test_report.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/upstream_gaps.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/usage.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/install-agent.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/pyproject.toml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/comment_cruft.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/setup.cfg +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/__init__.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/backends.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/conftest.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_graceful_shutdown_3649.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_graph_refresh.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_app_drive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_nightly_status.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_briefing_lessons.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_inject_board_less.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_close_wrong_repo.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_smoke_nightly.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_smoke_nightly_sweep.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_nightly.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_client.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_comment_cruft.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_prereview_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_db.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_events.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_init.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_key_spec.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_merge_verification.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_models.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_models_pinned_1650.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_native_fs_wait.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_native_pixels.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_network.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_nightly_runner.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_nightly_smoke.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_nightly_status.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_nightly_store.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_no_eligible_host_3600.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plain_runner_smoke_3673.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_prereview_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_session.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke_plain_runner_3673.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_split.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_upstream_gaps.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.656 → code_coordinator-0.5.658}/tests/write_parity.py +0 -0
|
@@ -250,10 +250,34 @@ def detect_dead_end(state, *, can_waive_test_gate: bool = False) -> DeadEnd | No
|
|
|
250
250
|
# symptom-not-cause failure #2235 exists to measure, and it is one
|
|
251
251
|
# `mute_smoke_legs` call away from being avoided.
|
|
252
252
|
if state.work_test_state == TEST_STATE_BLOCKED:
|
|
253
|
-
from coord.smoke import
|
|
253
|
+
from coord.smoke import ( # noqa: PLC0415
|
|
254
|
+
abandoned_background_smoke_legs,
|
|
255
|
+
mute_smoke_legs,
|
|
256
|
+
)
|
|
254
257
|
|
|
258
|
+
# #3737: a THIRD, unrelated cause parks the same value — N Test-stage
|
|
259
|
+
# legs in a row ended their one-shot turn with the smoke command
|
|
260
|
+
# still running in the background (no verdict marker, because the
|
|
261
|
+
# worker never came back to print one). Checked before the plain
|
|
262
|
+
# mute-leg tally since the two markers never co-occur in the same
|
|
263
|
+
# `test_reason`, but keeping the order explicit avoids depending on
|
|
264
|
+
# that.
|
|
265
|
+
abandoned_legs = abandoned_background_smoke_legs(state.work_test_reason)
|
|
255
266
|
mute_legs = mute_smoke_legs(state.work_test_reason)
|
|
256
|
-
if
|
|
267
|
+
if abandoned_legs:
|
|
268
|
+
cause = (
|
|
269
|
+
f"{abandoned_legs} Test-stage leg(s) in a row ended their "
|
|
270
|
+
"turn with the smoke command still running in the "
|
|
271
|
+
"background instead of to completion, exhausting the "
|
|
272
|
+
"#3737 retry budget (a separate budget from #2272's mute-"
|
|
273
|
+
"leg one, so this is not a report of a mute suite). Nothing "
|
|
274
|
+
"is known to be wrong with the BRANCH or the suite's "
|
|
275
|
+
"result — the worker backgrounded the smoke command past "
|
|
276
|
+
"its own turn and never reported an outcome. Re-dispatch "
|
|
277
|
+
"with an instruction to run the smoke command "
|
|
278
|
+
"SYNCHRONOUSLY to completion rather than backgrounding it."
|
|
279
|
+
)
|
|
280
|
+
elif mute_legs:
|
|
257
281
|
cause = (
|
|
258
282
|
f"{mute_legs} Test-stage leg(s) in a row finished without "
|
|
259
283
|
"printing a `SMOKE:` verdict marker, exhausting the retry "
|
|
@@ -1363,19 +1363,44 @@ def _recover_test(
|
|
|
1363
1363
|
``coord diagnose --stage test`` is a separate entry point an operator
|
|
1364
1364
|
runs by hand, and it must not disagree with the driver about whether the
|
|
1365
1365
|
same row is wedged.
|
|
1366
|
+
|
|
1367
|
+
#3737: ``coord.dead_end`` shape 2 has a THIRD cause for the same
|
|
1368
|
+
``blocked`` value — N Test-stage legs in a row ended their one-shot turn
|
|
1369
|
+
with the smoke command still running in the background, never printing a
|
|
1370
|
+
verdict marker — checked here too, in the same order, so this entry
|
|
1371
|
+
point never disagrees with the driver about why a row is wedged (#2096
|
|
1372
|
+
"one question, one answer").
|
|
1366
1373
|
"""
|
|
1367
1374
|
from coord.smoke import TEST_STATE_BLOCKED # noqa: PLC0415
|
|
1368
1375
|
|
|
1369
1376
|
if latest.test_state == TEST_STATE_BLOCKED:
|
|
1370
|
-
from coord.smoke import
|
|
1377
|
+
from coord.smoke import ( # noqa: PLC0415
|
|
1378
|
+
abandoned_background_smoke_legs,
|
|
1379
|
+
mute_smoke_legs,
|
|
1380
|
+
)
|
|
1371
1381
|
|
|
1372
|
-
# Same
|
|
1373
|
-
# (unroutable fleet) apart from #2272 (mute Test-stage legs)
|
|
1374
|
-
#
|
|
1375
|
-
#
|
|
1376
|
-
#
|
|
1382
|
+
# Same predicates `coord.dead_end`'s shape 2 uses to tell #1672
|
|
1383
|
+
# (unroutable fleet) apart from #2272 (mute Test-stage legs) and
|
|
1384
|
+
# #3737 (abandoned-background legs) — #2235 exists to keep those
|
|
1385
|
+
# REASONS from blurring together, so this reuses the identical
|
|
1386
|
+
# functions, in the identical order, rather than re-deriving the
|
|
1387
|
+
# split (#2096 "one question, one answer").
|
|
1388
|
+
abandoned_legs = abandoned_background_smoke_legs(latest.test_reason)
|
|
1377
1389
|
mute_legs = mute_smoke_legs(latest.test_reason)
|
|
1378
|
-
if
|
|
1390
|
+
if abandoned_legs:
|
|
1391
|
+
cause = (
|
|
1392
|
+
f"{abandoned_legs} Test-stage leg(s) in a row ended their "
|
|
1393
|
+
"turn with the smoke command still running in the "
|
|
1394
|
+
"background instead of to completion, exhausting the "
|
|
1395
|
+
"#3737 retry budget (a separate budget from #2272's mute-"
|
|
1396
|
+
"leg one, so this is not a report of a mute suite). Nothing "
|
|
1397
|
+
"is known to be wrong with the BRANCH or the suite's "
|
|
1398
|
+
"result — the worker backgrounded the smoke command past "
|
|
1399
|
+
"its own turn and never reported an outcome. Re-dispatch "
|
|
1400
|
+
"with an instruction to run the smoke command SYNCHRONOUSLY "
|
|
1401
|
+
"to completion rather than backgrounding it."
|
|
1402
|
+
)
|
|
1403
|
+
elif mute_legs:
|
|
1379
1404
|
cause = (
|
|
1380
1405
|
f"{mute_legs} Test-stage leg(s) in a row finished without "
|
|
1381
1406
|
"printing a `SMOKE:` verdict marker, exhausting the retry "
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
|
+
import re
|
|
6
7
|
import time
|
|
7
8
|
from dataclasses import dataclass, field
|
|
8
9
|
from pathlib import Path
|
|
@@ -66,6 +67,9 @@ from coord.progress import parse_progress
|
|
|
66
67
|
from coord.smoke import MUTE_SMOKE_LEG_BUDGET, TEST_STATE_BLOCKED
|
|
67
68
|
from coord.smoke import NO_SMOKE_VERDICT_MARKER as _NO_SMOKE_VERDICT_MARKER
|
|
68
69
|
from coord.smoke import (
|
|
70
|
+
ABANDONED_BACKGROUND_SMOKE_BUDGET,
|
|
71
|
+
abandoned_background_smoke_legs,
|
|
72
|
+
abandoned_background_smoke_tally,
|
|
69
73
|
finalize_smoke_fanout,
|
|
70
74
|
mute_smoke_legs,
|
|
71
75
|
mute_smoke_tally,
|
|
@@ -3343,6 +3347,69 @@ def _record_smoke_verdict(
|
|
|
3343
3347
|
)
|
|
3344
3348
|
return
|
|
3345
3349
|
|
|
3350
|
+
# #3737: a leg that ended its turn with the smoke command still running
|
|
3351
|
+
# in the background is an infra abort — the worker backgrounded a build
|
|
3352
|
+
# past its own turn and never came back to report it — not a genuinely
|
|
3353
|
+
# mute suite, so don't let it eat the #2272 budget meant for the latter.
|
|
3354
|
+
# `_is_plain_runner_leg` (#3693) legs have no `claude -p` session
|
|
3355
|
+
# narrating a hand-off at all, so they are excluded rather than risk a
|
|
3356
|
+
# false match against raw subprocess stdout.
|
|
3357
|
+
smoke_log_path = entry.get("log_path")
|
|
3358
|
+
if smoke_log_path and not _is_plain_runner_leg(entry):
|
|
3359
|
+
from coord.review import detect_abandoned_background_leg # noqa: PLC0415
|
|
3360
|
+
|
|
3361
|
+
if detect_abandoned_background_leg(smoke_log_path):
|
|
3362
|
+
previous_reason = load_assignment_test_reason(parent_id) or ""
|
|
3363
|
+
abandoned_legs = abandoned_background_smoke_legs(previous_reason) + 1
|
|
3364
|
+
if abandoned_legs >= ABANDONED_BACKGROUND_SMOKE_BUDGET:
|
|
3365
|
+
record_test_verdict(
|
|
3366
|
+
assignment_id=parent_id,
|
|
3367
|
+
test_state=TEST_STATE_BLOCKED,
|
|
3368
|
+
test_reason=(
|
|
3369
|
+
f"{abandoned_background_smoke_tally(abandoned_legs)}: "
|
|
3370
|
+
f"{abandoned_legs} Test-stage legs in a row ended "
|
|
3371
|
+
"their turn with the smoke command still running in "
|
|
3372
|
+
"the background instead of to completion — the "
|
|
3373
|
+
f"retry budget ({ABANDONED_BACKGROUND_SMOKE_BUDGET}) "
|
|
3374
|
+
"for that is exhausted, so the row is parked instead "
|
|
3375
|
+
"of re-dispatched (#3737). This is not a suite "
|
|
3376
|
+
"failure: the smoke command itself needs to finish "
|
|
3377
|
+
"inside the worker's one-shot turn (no backgrounding, "
|
|
3378
|
+
"no `run_in_background`). Recover with `coord "
|
|
3379
|
+
"diagnose <repo> <issue> --stage test --reset`, or "
|
|
3380
|
+
"record the verdict by hand with `coord test "
|
|
3381
|
+
f"--passed|--fail {parent_id}`."
|
|
3382
|
+
),
|
|
3383
|
+
)
|
|
3384
|
+
log.warning(
|
|
3385
|
+
"smoke %s: #3737 abandoned-background retry budget "
|
|
3386
|
+
"(%d) exhausted for %s — parked %s.",
|
|
3387
|
+
transition.assignment_id, ABANDONED_BACKGROUND_SMOKE_BUDGET,
|
|
3388
|
+
parent_id, TEST_STATE_BLOCKED,
|
|
3389
|
+
)
|
|
3390
|
+
return
|
|
3391
|
+
record_test_verdict(
|
|
3392
|
+
assignment_id=parent_id,
|
|
3393
|
+
test_state=None,
|
|
3394
|
+
test_reason=(
|
|
3395
|
+
f"{abandoned_background_smoke_tally(abandoned_legs)}: the "
|
|
3396
|
+
f"Test-stage worker {transition.assignment_id} ended its "
|
|
3397
|
+
"turn with the smoke command still running in the "
|
|
3398
|
+
"background instead of to completion — an infra abort, "
|
|
3399
|
+
"not a verdict (#3737). Cleared for an automatic "
|
|
3400
|
+
"Test-stage re-dispatch; run the smoke command "
|
|
3401
|
+
"SYNCHRONOUSLY to completion this time rather than "
|
|
3402
|
+
"backgrounding it."
|
|
3403
|
+
),
|
|
3404
|
+
)
|
|
3405
|
+
log.info(
|
|
3406
|
+
"smoke %s: #3737 abandoned-background leg %d/%d — cleared "
|
|
3407
|
+
"for re-dispatch, not counted against the #2272 mute budget.",
|
|
3408
|
+
transition.assignment_id, abandoned_legs,
|
|
3409
|
+
ABANDONED_BACKGROUND_SMOKE_BUDGET,
|
|
3410
|
+
)
|
|
3411
|
+
return
|
|
3412
|
+
|
|
3346
3413
|
# #2272: count the legs, don't just test for the marker's presence. The
|
|
3347
3414
|
# tally lives at the FRONT of `test_reason` so a bounded `/board` preview
|
|
3348
3415
|
# still carries it, and `dispatch_smoke` re-states it across the `running`
|
|
@@ -1040,6 +1040,97 @@ def parse_test_verdict_from_log(log_path: str | Path) -> TestVerdictFindings | N
|
|
|
1040
1040
|
return _parse_test_verdict_from_lines(text.splitlines(), stream_json=False)
|
|
1041
1041
|
|
|
1042
1042
|
|
|
1043
|
+
# ── Abandoned-background Test-stage legs (#3737) ────────────────────────────
|
|
1044
|
+
#
|
|
1045
|
+
# A Test-stage leg that ends its one-shot turn with the smoke command still
|
|
1046
|
+
# running in the background — session terminated, no `SMOKE:`/
|
|
1047
|
+
# `TEST_VERDICT:` marker printed — is an infra abort (the worker backgrounded
|
|
1048
|
+
# a run past its own turn and never came back to report it), not a genuine
|
|
1049
|
+
# "the suite won't speak". Left undetected it is indistinguishable from the
|
|
1050
|
+
# latter and charges the same #2272 mute-leg retry budget, so two
|
|
1051
|
+
# backgrounded legs in a row park a branch that was never actually silent.
|
|
1052
|
+
#
|
|
1053
|
+
# The signature is the worker's own hand-off sentence, which is always the
|
|
1054
|
+
# LAST assistant turn of a session that ends this way (quadraui#1616: "Smoke
|
|
1055
|
+
# suite is running in the background; I'll continue once the background
|
|
1056
|
+
# watcher notifies me", "still running in the background, will continue
|
|
1057
|
+
# when notified"). Scanning only the final turn — mirrors
|
|
1058
|
+
# :func:`coord.worker_events.detect_usage_limit_kill`'s "last meaningful
|
|
1059
|
+
# turn/line only" discipline — avoids false-positiving on a worker that
|
|
1060
|
+
# merely discusses backgrounding mid-session before going on to print a
|
|
1061
|
+
# real verdict later in the same transcript.
|
|
1062
|
+
#
|
|
1063
|
+
# Plain-text logs have no structured turn boundary to scan exactly, so
|
|
1064
|
+
# `detect_abandoned_background_leg` approximates "the final turn" with the
|
|
1065
|
+
# last `_ABANDONED_BACKGROUND_TAIL_LINES` non-blank, non-comment lines
|
|
1066
|
+
# instead (below) — wide enough to hold a multi-sentence hand-off without
|
|
1067
|
+
# reaching back far enough to catch an earlier, unrelated mention of
|
|
1068
|
+
# backgrounding. Stream-json logs (the common case) use the real turn
|
|
1069
|
+
# boundary via `coord.worker_events.latest_assistant_turn_text`.
|
|
1070
|
+
#
|
|
1071
|
+
# Deliberately narrow: this matches only the specific "running in the
|
|
1072
|
+
# background ... continue/notify/watcher/wait" hand-off shape quadraui#1616
|
|
1073
|
+
# actually produced, not every way a worker might phrase "I backgrounded
|
|
1074
|
+
# this". A differently-worded hand-off falls through to the #2272 mute-leg
|
|
1075
|
+
# accounting instead (an undercount, not a false positive) — acceptable
|
|
1076
|
+
# because #2272 still eventually parks the row, just under the wrong cause
|
|
1077
|
+
# text. Widen the pattern if a real transcript is seen phrasing this
|
|
1078
|
+
# differently, rather than guessing at alternate phrasings up front.
|
|
1079
|
+
_ABANDONED_BACKGROUND_RE = re.compile(
|
|
1080
|
+
r"\brunning\s+in\s+the\s+background\b[\s\S]{0,200}?"
|
|
1081
|
+
r"\b(?:continu\w*|notif\w*|watcher|wait\w*)\b",
|
|
1082
|
+
re.IGNORECASE,
|
|
1083
|
+
)
|
|
1084
|
+
|
|
1085
|
+
_ABANDONED_BACKGROUND_TAIL_LINES = 40
|
|
1086
|
+
|
|
1087
|
+
|
|
1088
|
+
def _is_abandoned_background_text(text: str | None) -> bool:
|
|
1089
|
+
"""``True`` if *text* — one assistant turn's worth of prose, or an
|
|
1090
|
+
equivalent plain-text tail — is the hand-off a one-shot worker leaves
|
|
1091
|
+
when its session ends with the smoke command still running in the
|
|
1092
|
+
background rather than run to completion."""
|
|
1093
|
+
if not text:
|
|
1094
|
+
return False
|
|
1095
|
+
return bool(_ABANDONED_BACKGROUND_RE.search(text))
|
|
1096
|
+
|
|
1097
|
+
|
|
1098
|
+
def detect_abandoned_background_leg(log_path: str | Path) -> bool:
|
|
1099
|
+
"""#3737: did this completed Test-stage leg end its turn with the smoke
|
|
1100
|
+
command still running in the background, instead of to completion?
|
|
1101
|
+
|
|
1102
|
+
Sibling to :func:`parse_test_verdict_from_log`: same stream-json/
|
|
1103
|
+
plain-text on-disk-shape detection (:func:`coord.worker_events.
|
|
1104
|
+
is_stream_json`), so the two can never disagree about which parser a
|
|
1105
|
+
given log needs. Returns ``False`` — never raises, never guesses "True"
|
|
1106
|
+
— when the file is missing or unreadable, so a detection failure falls
|
|
1107
|
+
through to the ordinary mute-leg accounting rather than silently
|
|
1108
|
+
forgiving a genuinely mute suite.
|
|
1109
|
+
"""
|
|
1110
|
+
from coord.worker_events import ( # noqa: PLC0415
|
|
1111
|
+
is_stream_json,
|
|
1112
|
+
latest_assistant_turn_text,
|
|
1113
|
+
)
|
|
1114
|
+
|
|
1115
|
+
p = Path(log_path)
|
|
1116
|
+
if not p.exists():
|
|
1117
|
+
return False
|
|
1118
|
+
|
|
1119
|
+
if is_stream_json(p):
|
|
1120
|
+
return _is_abandoned_background_text(latest_assistant_turn_text(p))
|
|
1121
|
+
|
|
1122
|
+
try:
|
|
1123
|
+
text = p.read_text(encoding="utf-8", errors="replace")
|
|
1124
|
+
except OSError:
|
|
1125
|
+
return False
|
|
1126
|
+
lines = [
|
|
1127
|
+
line for line in text.splitlines()
|
|
1128
|
+
if line.strip() and not line.strip().startswith("#")
|
|
1129
|
+
]
|
|
1130
|
+
tail = "\n".join(lines[-_ABANDONED_BACKGROUND_TAIL_LINES:])
|
|
1131
|
+
return _is_abandoned_background_text(tail)
|
|
1132
|
+
|
|
1133
|
+
|
|
1043
1134
|
# #3676: cross-repo gaps are the coordinator's to file. A worker that hits a
|
|
1044
1135
|
# capability missing from another repo emits a `BLOCKED_ON_UPSTREAM: <repo>:
|
|
1045
1136
|
# <title>` marker in its final message (`coord.upstream_gaps`), and the
|
|
@@ -2333,6 +2333,74 @@ def environmental_smoke_tally_reset(test_reason: str | None) -> str:
|
|
|
2333
2333
|
return _ENV_RETRY_TALLY_RE.sub("", test_reason).rstrip()
|
|
2334
2334
|
|
|
2335
2335
|
|
|
2336
|
+
# ── Abandoned-background Test-stage retries (#3737) ─────────────────────────
|
|
2337
|
+
#
|
|
2338
|
+
# A Test-stage leg that ends its one-shot turn with the smoke command still
|
|
2339
|
+
# running in the background — session terminated, no `SMOKE:` marker printed
|
|
2340
|
+
# — is an infra abort (the worker backgrounded a long build past its own
|
|
2341
|
+
# turn and never came back to report an outcome), not a genuinely mute
|
|
2342
|
+
# suite. `coord.notify._record_smoke_verdict` detects the hand-off
|
|
2343
|
+
# (`coord.review.detect_abandoned_background_leg`) and clears the leg for an
|
|
2344
|
+
# automatic re-dispatch without charging `MUTE_SMOKE_LEG_BUDGET` — but that
|
|
2345
|
+
# clear still needs its OWN bounded budget (below), for exactly the #2272/
|
|
2346
|
+
# #3315 reason: a cause the system cannot diagnose must still be a cause the
|
|
2347
|
+
# system stops paying for. Co-located here with `NO_SMOKE_VERDICT_MARKER`/
|
|
2348
|
+
# `ENVIRONMENTAL_SMOKE_MARKER` — not in `coord.notify`, where this used to
|
|
2349
|
+
# live — because `_dispatch_smoke_single_leg`'s `running` stamp just below is
|
|
2350
|
+
# the SAME writer that has to carry `mute_smoke_legs`/`environmental_smoke_
|
|
2351
|
+
# legs` forward across its own re-dispatch, and a marker read by that writer
|
|
2352
|
+
# but defined in a different module is exactly how the #2272 defect (the
|
|
2353
|
+
# tally erased by the very retry it existed to count) happened in the first
|
|
2354
|
+
# place.
|
|
2355
|
+
|
|
2356
|
+
#: The marker left in the parent work row's ``test_reason`` when a Test-stage
|
|
2357
|
+
#: leg is cleared for re-dispatch because it ended with the smoke command
|
|
2358
|
+
#: still backgrounded, rather than because the suite was genuinely mute.
|
|
2359
|
+
#: Suffixed with `` xN`` from the second CONSECUTIVE leg on, mirroring
|
|
2360
|
+
#: :func:`mute_smoke_tally`.
|
|
2361
|
+
ABANDONED_BACKGROUND_SMOKE_MARKER = "abandoned-background (#3737)"
|
|
2362
|
+
|
|
2363
|
+
#: Bounded separately from `MUTE_SMOKE_LEG_BUDGET` — a direct "run it
|
|
2364
|
+
#: synchronously" re-dispatch instruction is more likely to self-heal than a
|
|
2365
|
+
#: genuinely silent suite, so it gets a little more room, but a cause the
|
|
2366
|
+
#: system cannot diagnose must still be a cause the system stops paying for
|
|
2367
|
+
#: (#3315's own rationale, applied here to a different cause).
|
|
2368
|
+
ABANDONED_BACKGROUND_SMOKE_BUDGET = 3
|
|
2369
|
+
|
|
2370
|
+
#: Matches the marker with or without its `` xN`` tally — mirrors
|
|
2371
|
+
#: :data:`_MUTE_TALLY_RE`.
|
|
2372
|
+
_ABANDONED_BACKGROUND_TALLY_RE = re.compile(
|
|
2373
|
+
re.escape(ABANDONED_BACKGROUND_SMOKE_MARKER) + r"(?:\s*x\s*(\d+))?",
|
|
2374
|
+
re.IGNORECASE,
|
|
2375
|
+
)
|
|
2376
|
+
|
|
2377
|
+
|
|
2378
|
+
def abandoned_background_smoke_legs(test_reason: str | None) -> int:
|
|
2379
|
+
"""How many CONSECUTIVE Test-stage legs in a row ended with the #3737
|
|
2380
|
+
abandoned-background hand-off (0 if none) — mirrors
|
|
2381
|
+
:func:`mute_smoke_legs`."""
|
|
2382
|
+
if not test_reason:
|
|
2383
|
+
return 0
|
|
2384
|
+
match = _ABANDONED_BACKGROUND_TALLY_RE.search(test_reason)
|
|
2385
|
+
if match is None:
|
|
2386
|
+
return 0
|
|
2387
|
+
raw = match.group(1)
|
|
2388
|
+
if raw is None:
|
|
2389
|
+
return 1
|
|
2390
|
+
try:
|
|
2391
|
+
return max(1, int(raw))
|
|
2392
|
+
except ValueError: # pragma: no cover — regex only matches digits
|
|
2393
|
+
return 1
|
|
2394
|
+
|
|
2395
|
+
|
|
2396
|
+
def abandoned_background_smoke_tally(count: int) -> str:
|
|
2397
|
+
"""The marker for *count* consecutive abandoned-background legs — mirrors
|
|
2398
|
+
:func:`mute_smoke_tally`."""
|
|
2399
|
+
if count <= 1:
|
|
2400
|
+
return ABANDONED_BACKGROUND_SMOKE_MARKER
|
|
2401
|
+
return f"{ABANDONED_BACKGROUND_SMOKE_MARKER} x{count}"
|
|
2402
|
+
|
|
2403
|
+
|
|
2336
2404
|
#: Soft (transient) unroutable reports already logged this process, keyed by
|
|
2337
2405
|
#: ``(assignment_id, message)``. Transient conditions — a machine that is
|
|
2338
2406
|
#: merely unreachable right now — are left re-dispatchable so the stage
|
|
@@ -3641,6 +3709,16 @@ def _dispatch_smoke_single_leg(
|
|
|
3641
3709
|
environmental_smoke_legs(authoritative_reason),
|
|
3642
3710
|
environmental_smoke_legs(board_reason),
|
|
3643
3711
|
)
|
|
3712
|
+
# #3737: ...and this stamp must ALSO carry the ABANDONED-BACKGROUND
|
|
3713
|
+
# tally forward, for the identical #2272 reason above — without
|
|
3714
|
+
# re-stating it here, this same "running" write erases it on every
|
|
3715
|
+
# retry and the #3737 budget below (`_record_smoke_verdict`'s
|
|
3716
|
+
# abandoned-background branch) can never be reached: the row would
|
|
3717
|
+
# re-dispatch forever at full leg cost instead of eventually parking.
|
|
3718
|
+
prior_abandoned_legs = max(
|
|
3719
|
+
abandoned_background_smoke_legs(authoritative_reason),
|
|
3720
|
+
abandoned_background_smoke_legs(board_reason),
|
|
3721
|
+
)
|
|
3644
3722
|
running_reason = "dispatched: Test stage running (#1426)"
|
|
3645
3723
|
if prior_legs:
|
|
3646
3724
|
running_reason = (
|
|
@@ -3655,6 +3733,13 @@ def _dispatch_smoke_single_leg(
|
|
|
3655
3733
|
f"{ENVIRONMENTAL_SMOKE_RETRY_BUDGET} consecutive "
|
|
3656
3734
|
"environmental Test-stage death(s) so far, #3315)"
|
|
3657
3735
|
)
|
|
3736
|
+
if prior_abandoned_legs:
|
|
3737
|
+
running_reason = (
|
|
3738
|
+
f"{abandoned_background_smoke_tally(prior_abandoned_legs)} — "
|
|
3739
|
+
f"{running_reason} ({prior_abandoned_legs} of "
|
|
3740
|
+
f"{ABANDONED_BACKGROUND_SMOKE_BUDGET} consecutive "
|
|
3741
|
+
"abandoned-background Test-stage leg(s) so far, #3737)"
|
|
3742
|
+
)
|
|
3658
3743
|
|
|
3659
3744
|
record_test_verdict(
|
|
3660
3745
|
assignment_id=completed.assignment_id,
|
|
@@ -1501,10 +1501,13 @@ def _reclassify_infra_test_failure(
|
|
|
1501
1501
|
a second, unbounded retry path. The tally is read back out of the row's
|
|
1502
1502
|
OWN current ``test_reason`` (the one field that survives from leg to
|
|
1503
1503
|
leg), exactly mirroring that function's non-fan-out branch, including
|
|
1504
|
-
carrying the #2272 mute-leg tally
|
|
1505
|
-
mute_smoke_legs`/``mute_smoke_tally
|
|
1506
|
-
|
|
1507
|
-
|
|
1504
|
+
carrying the #2272 mute-leg tally AND the #3737 abandoned-background
|
|
1505
|
+
tally forward (:func:`coord.smoke.mute_smoke_legs`/``mute_smoke_tally``,
|
|
1506
|
+
:func:`coord.smoke.abandoned_background_smoke_legs`/
|
|
1507
|
+
``abandoned_background_smoke_tally``) so a row that alternates between
|
|
1508
|
+
any of "mute leg" / "infra death" / "abandoned background" keeps
|
|
1509
|
+
counting against every applicable budget instead of resetting one every
|
|
1510
|
+
time another fires.
|
|
1508
1511
|
|
|
1509
1512
|
#3670 review: when *test_reason* is the #3182 fan-out PARENT's own
|
|
1510
1513
|
write (:func:`coord.smoke.finalize_smoke_fanout` stamping the aggregate
|
|
@@ -1530,6 +1533,8 @@ def _reclassify_infra_test_failure(
|
|
|
1530
1533
|
TEST_STATE_BLOCKED,
|
|
1531
1534
|
_encode_fanout_manifest,
|
|
1532
1535
|
_parse_fanout_manifest,
|
|
1536
|
+
abandoned_background_smoke_legs,
|
|
1537
|
+
abandoned_background_smoke_tally,
|
|
1533
1538
|
environmental_smoke_legs,
|
|
1534
1539
|
environmental_smoke_tally,
|
|
1535
1540
|
mute_smoke_legs,
|
|
@@ -1579,13 +1584,25 @@ def _reclassify_infra_test_failure(
|
|
|
1579
1584
|
carried = mute_smoke_legs(previous_reason)
|
|
1580
1585
|
mute_prefix = f"{mute_smoke_tally(carried)} — " if carried else ""
|
|
1581
1586
|
|
|
1587
|
+
# #3737: carry the abandoned-background tally forward too, for the
|
|
1588
|
+
# identical #2272 reason the mute-leg tally is carried above — this
|
|
1589
|
+
# reclassify path is a second writer of `test_reason` on the SAME row a
|
|
1590
|
+
# #3737 budget is accruing against, and without re-stating it here it
|
|
1591
|
+
# would be silently erased the next time an infra death reclassifies in
|
|
1592
|
+
# between two abandoned-background legs.
|
|
1593
|
+
abandoned_carried = abandoned_background_smoke_legs(previous_reason)
|
|
1594
|
+
abandoned_prefix = (
|
|
1595
|
+
f"{abandoned_background_smoke_tally(abandoned_carried)} — "
|
|
1596
|
+
if abandoned_carried else ""
|
|
1597
|
+
)
|
|
1598
|
+
|
|
1582
1599
|
env_legs = environmental_smoke_legs(previous_reason) + 1
|
|
1583
1600
|
|
|
1584
1601
|
if env_legs >= ENVIRONMENTAL_SMOKE_RETRY_BUDGET:
|
|
1585
1602
|
return (
|
|
1586
1603
|
TEST_STATE_BLOCKED,
|
|
1587
1604
|
(
|
|
1588
|
-
f"{manifest_prefix}{mute_prefix}"
|
|
1605
|
+
f"{manifest_prefix}{mute_prefix}{abandoned_prefix}"
|
|
1589
1606
|
f"{environmental_smoke_tally(env_legs)}: the Test-stage "
|
|
1590
1607
|
f"environmental retry budget "
|
|
1591
1608
|
f"({ENVIRONMENTAL_SMOKE_RETRY_BUDGET}) is exhausted after "
|
|
@@ -1602,7 +1619,7 @@ def _reclassify_infra_test_failure(
|
|
|
1602
1619
|
return (
|
|
1603
1620
|
None,
|
|
1604
1621
|
(
|
|
1605
|
-
f"{manifest_prefix}{mute_prefix}"
|
|
1622
|
+
f"{manifest_prefix}{mute_prefix}{abandoned_prefix}"
|
|
1606
1623
|
f"{environmental_smoke_tally(env_legs)}: Test-stage failure "
|
|
1607
1624
|
f"reclassified as infrastructure, not a test result ({cause}) "
|
|
1608
1625
|
"— cleared for automatic re-dispatch, not recorded as a work "
|
|
@@ -3085,6 +3102,12 @@ def review_claim_age_secs(of_assignment_id: str) -> float | None:
|
|
|
3085
3102
|
|
|
3086
3103
|
Same local-DB-only caveat as :func:`has_review_claim` — reads the local
|
|
3087
3104
|
connection, not the daemon, so it undercounts on a thin client.
|
|
3105
|
+
|
|
3106
|
+
Clamped to ``0.0``: ``_new_review_claim_stamp`` adds a sub-millisecond
|
|
3107
|
+
positive jitter to ``time.time()`` for uniqueness, so a read taken
|
|
3108
|
+
microseconds after the claim can land *before* that jittered stamp and
|
|
3109
|
+
would otherwise go slightly negative — "age since claim" can never be
|
|
3110
|
+
less than zero.
|
|
3088
3111
|
"""
|
|
3089
3112
|
if not of_assignment_id:
|
|
3090
3113
|
return None
|
|
@@ -3096,7 +3119,7 @@ def review_claim_age_secs(of_assignment_id: str) -> float | None:
|
|
|
3096
3119
|
).fetchone()
|
|
3097
3120
|
if row is None or row[0] is None:
|
|
3098
3121
|
return None
|
|
3099
|
-
return time.time() - row[0]
|
|
3122
|
+
return max(0.0, time.time() - row[0])
|
|
3100
3123
|
|
|
3101
3124
|
|
|
3102
3125
|
def has_recorded_review_verdict(assignment_id: str) -> bool:
|
|
@@ -301,6 +301,37 @@ def test_a_mute_exhausted_test_stage_names_its_own_cause() -> None:
|
|
|
301
301
|
assert "Nothing is known to be wrong with the BRANCH" in found.reason
|
|
302
302
|
|
|
303
303
|
|
|
304
|
+
def test_an_abandoned_background_exhausted_test_stage_names_its_own_cause() -> None:
|
|
305
|
+
"""#3737: the abandoned-background retry budget parks the SAME ``blocked``
|
|
306
|
+
value as #1672's unroutable stage and #2272's mute-leg budget, but it is a
|
|
307
|
+
THIRD, distinct cause — the worker backgrounded the smoke command past its
|
|
308
|
+
own turn — and must not be misreported as either of the other two.
|
|
309
|
+
"""
|
|
310
|
+
from coord.notify import abandoned_background_smoke_tally # noqa: PLC0415
|
|
311
|
+
|
|
312
|
+
found = detect_dead_end(
|
|
313
|
+
state(
|
|
314
|
+
work_aid="w3737",
|
|
315
|
+
work_status="done",
|
|
316
|
+
work_branch="issue-3737",
|
|
317
|
+
work_test_state=TEST_STATE_BLOCKED,
|
|
318
|
+
work_test_reason=(
|
|
319
|
+
f"{abandoned_background_smoke_tally(3)}: the Test-stage "
|
|
320
|
+
"worker dc91c2843872 ended its turn with the smoke command "
|
|
321
|
+
"still running in the background instead of to completion."
|
|
322
|
+
),
|
|
323
|
+
active_count=0,
|
|
324
|
+
)
|
|
325
|
+
)
|
|
326
|
+
assert found is not None
|
|
327
|
+
assert found.kind == "test_stage_blocked"
|
|
328
|
+
assert "#3737" in found.reason
|
|
329
|
+
assert "running in the background" in found.reason
|
|
330
|
+
# It must NOT misattribute this to the fleet or to a genuinely mute suite.
|
|
331
|
+
assert "no capability-matched" not in found.reason
|
|
332
|
+
assert "verdict marker" not in found.reason
|
|
333
|
+
|
|
334
|
+
|
|
304
335
|
def test_gates_carry_the_readings_that_proved_the_dead_end() -> None:
|
|
305
336
|
"""The escalation record has to answer "how did you conclude that?"
|
|
306
337
|
without the tmux pane, which is gone. ``active=0`` in particular is the
|
|
@@ -1899,6 +1899,31 @@ def test_blocked_test_state_names_mute_legs_cause(monkeypatch, config) -> None:
|
|
|
1899
1899
|
assert not any("#1672" in f for f in res.findings)
|
|
1900
1900
|
|
|
1901
1901
|
|
|
1902
|
+
def test_blocked_test_state_names_abandoned_background_cause(monkeypatch, config) -> None:
|
|
1903
|
+
"""#3737 shape: N Test-stage legs in a row ended their turn with the
|
|
1904
|
+
smoke command still backgrounded, never printing a verdict —
|
|
1905
|
+
`abandoned_background_smoke_legs` (the exact function `coord.dead_end`
|
|
1906
|
+
shape 2 checks FIRST, ahead of the #2272 mute-leg one, #2235) finds the
|
|
1907
|
+
tally marker, so this must name THAT cause instead of either sibling —
|
|
1908
|
+
and must not misdiagnose this as an unroutable fleet (#1672)."""
|
|
1909
|
+
from coord.smoke import abandoned_background_smoke_tally
|
|
1910
|
+
|
|
1911
|
+
_stub(monkeypatch, session="dead")
|
|
1912
|
+
work = _assign(aid="w1", typ="work", status="done")
|
|
1913
|
+
work.test_state = "blocked"
|
|
1914
|
+
work.test_reason = f"{abandoned_background_smoke_tally(3)}: still backgrounded"
|
|
1915
|
+
board = Board(completed=[work])
|
|
1916
|
+
|
|
1917
|
+
res = diagnose.diagnose_stage(board, config, "api", 42, "test", dry_run=True)
|
|
1918
|
+
|
|
1919
|
+
assert any("#3737" in f and "backgrounded" in f for f in res.findings)
|
|
1920
|
+
assert not any("#1672" in f for f in res.findings)
|
|
1921
|
+
# The mute-leg cause text is distinct ("printing a `SMOKE:` verdict
|
|
1922
|
+
# marker") — must not be the one actually reported here even though
|
|
1923
|
+
# #2272 is named in passing as the OTHER budget.
|
|
1924
|
+
assert not any("verdict marker" in f for f in res.findings)
|
|
1925
|
+
|
|
1926
|
+
|
|
1902
1927
|
def test_reset_test_reports_which_rows_were_cleared(monkeypatch, config, coord_db) -> None:
|
|
1903
1928
|
"""#3332: the reset report must name which rows it cleared, not just a
|
|
1904
1929
|
bare count — an operator reading "cleared Test verdict on 3 work
|
|
@@ -477,14 +477,27 @@ def test_fix_cargo_targets_protects_a_repo_with_a_live_assignment(
|
|
|
477
477
|
cap is tier-3 whole-directory eviction. With a live `running` assignment
|
|
478
478
|
for ``repo1`` on this machine, that eviction must be skipped: the sweep
|
|
479
479
|
stays over cap and the directory survives.
|
|
480
|
+
|
|
481
|
+
Mocks ``shutil.disk_usage`` to report ample free space, mirroring its
|
|
482
|
+
twin (``test_fix_cargo_targets_evicts_the_same_repo_once_it_goes_idle``)
|
|
483
|
+
so the two tests differ only in the live assignment — otherwise this
|
|
484
|
+
test's "still over cap" / surviving-blob assertions would also pass
|
|
485
|
+
vacuously on a runner with under 10GB free (`cargo_floor_unreachable`,
|
|
486
|
+
`coord/cargo_cache.py`), proving nothing about `protect_repos` either.
|
|
480
487
|
"""
|
|
481
488
|
import coord.board_service as board_service
|
|
489
|
+
from coord import cargo_cache
|
|
482
490
|
from coord.health.checks import release_cordon as check_mod
|
|
483
491
|
|
|
484
492
|
coord_dir = tmp_path / ".coord"
|
|
485
493
|
_write_bytes(coord_dir / "cargo-target" / "repo1" / "blob", 4096)
|
|
486
494
|
_gc_status(coord_dir)
|
|
487
495
|
monkeypatch.setenv("COORD_CARGO_CACHE_CAP_GB", "0.0000000001")
|
|
496
|
+
monkeypatch.setattr(
|
|
497
|
+
cargo_cache.shutil,
|
|
498
|
+
"disk_usage",
|
|
499
|
+
lambda _p: SimpleNamespace(total=1_000_000_000_000, used=0, free=1_000_000_000_000),
|
|
500
|
+
)
|
|
488
501
|
|
|
489
502
|
monkeypatch.setattr(check_mod.socket, "gethostname", lambda: "precision")
|
|
490
503
|
config = SimpleNamespace(
|
|
@@ -518,14 +531,29 @@ def test_fix_cargo_targets_evicts_the_same_repo_once_it_goes_idle(
|
|
|
518
531
|
) -> None:
|
|
519
532
|
"""Same fixture as the protection test above, minus the live assignment
|
|
520
533
|
— proves the protection in that test is doing the work, not some other
|
|
521
|
-
difference between the two setups.
|
|
534
|
+
difference between the two setups.
|
|
535
|
+
|
|
536
|
+
Mocks ``shutil.disk_usage`` to report ample free space: without it, the
|
|
537
|
+
free-space floor (default 10GB, ``COORD_CARGO_FREE_FLOOR_GB``) reads the
|
|
538
|
+
REAL disk free space of whatever machine runs this test. On a runner
|
|
539
|
+
with under 10GB free, the tiny 4096-byte fixture cache can never cover
|
|
540
|
+
the shortfall on its own, ``cargo_floor_unreachable`` fires, tier-3
|
|
541
|
+
eviction is skipped entirely, and the repo survives — flipping this
|
|
542
|
+
test's outcome based on the host's disk, not the code under test.
|
|
543
|
+
"""
|
|
522
544
|
import coord.board_service as board_service
|
|
545
|
+
from coord import cargo_cache
|
|
523
546
|
from coord.health.checks import release_cordon as check_mod
|
|
524
547
|
|
|
525
548
|
coord_dir = tmp_path / ".coord"
|
|
526
549
|
_write_bytes(coord_dir / "cargo-target" / "repo1" / "blob", 4096)
|
|
527
550
|
_gc_status(coord_dir)
|
|
528
551
|
monkeypatch.setenv("COORD_CARGO_CACHE_CAP_GB", "0.0000000001")
|
|
552
|
+
monkeypatch.setattr(
|
|
553
|
+
cargo_cache.shutil,
|
|
554
|
+
"disk_usage",
|
|
555
|
+
lambda _p: SimpleNamespace(total=1_000_000_000_000, used=0, free=1_000_000_000_000),
|
|
556
|
+
)
|
|
529
557
|
|
|
530
558
|
monkeypatch.setattr(check_mod.socket, "gethostname", lambda: "precision")
|
|
531
559
|
config = SimpleNamespace(
|