code-coordinator 0.5.643__tar.gz → 0.5.644__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.643 → code_coordinator-0.5.644}/PKG-INFO +1 -1
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/code_coordinator.egg-info/PKG-INFO +1 -1
- code_coordinator-0.5.644/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/diagnose.py +10 -1
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/failure_class.py +39 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notify.py +9 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/reconcile.py +73 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/state.py +45 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_diagnose.py +66 -4
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_failure_class.py +20 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notify.py +124 -16
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_smoke.py +75 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_state.py +29 -0
- code_coordinator-0.5.643/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/.gitignore +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/CLAUDE.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/GOAL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/LICENSE +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/MANIFEST.in +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/README.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/__init__.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/agent.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/app_drive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/app_drive_daemon.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/audit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/backup.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/block_log.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/board_service.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/brain.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/briefing_lessons.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/claim.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/cli.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/client.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/codegen.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/app_drive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/smoke.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/comments.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/config.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dao.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/db.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/deps.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/drive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/events.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/filelock.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/freshness.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/gates.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/goal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/gui_lane_preflight.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/context.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/models.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/render.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/health/units.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/hooks.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/interactive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/key_spec.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/models.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/native_fs_wait.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/native_pixels.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/network.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/nightly_runner.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/nightly_smoke.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/nightly_status.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/nightly_store.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/openapi.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/parentage.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/plans.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/prereview_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/progress.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/release_window.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/reports.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/review.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/self_health.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/shell_exec_wrap.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/smoke.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/split_work.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/sql.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/test_author.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/test_report.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/upstream_gaps.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/usage.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/install-agent.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/pyproject.toml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/comment_cruft.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/setup.cfg +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/__init__.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/backends.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/conftest.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_graph_refresh.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_app_drive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_board_nightly_status.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_briefing_lessons.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_inject_board_less.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_smoke_nightly.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_smoke_nightly_sweep.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_nightly.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_client.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_comment_cruft.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_config.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_config_prereview_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_db.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_events.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_init.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_key_spec.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_merge_verification.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_models.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_models_pinned_1650.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_native_fs_wait.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_native_pixels.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_network.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_nightly_runner.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_nightly_smoke.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_nightly_status.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_nightly_store.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_no_eligible_host_3600.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_plain_runner_smoke_3673.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_prereview_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_review.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_session.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_smoke_plain_runner_3673.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_split.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_upstream_gaps.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.643 → code_coordinator-0.5.644}/tests/write_parity.py +0 -0
|
@@ -1441,10 +1441,19 @@ def _recover_test(
|
|
|
1441
1441
|
from coord.reconcile import ( # noqa: PLC0415
|
|
1442
1442
|
propagate_smoke_terminal_failure,
|
|
1443
1443
|
)
|
|
1444
|
-
|
|
1444
|
+
from coord.state import load_assignment_exit_code # noqa: PLC0415
|
|
1445
|
+
|
|
1446
|
+
# #3705: the board projection carries no `exit_code`, so read the
|
|
1447
|
+
# smoke child's recorded exit status directly — without it every
|
|
1448
|
+
# reason-less failure would reclassify as a silent #1605 death and
|
|
1449
|
+
# earn a bounded retry instead of a work failure. A `cancelled`
|
|
1450
|
+
# row is the operator's own `coord stop`, whose exit status is the
|
|
1451
|
+
# kill signal rather than a verdict on the code under test.
|
|
1445
1452
|
propagate_smoke_terminal_failure(
|
|
1446
1453
|
parent_assignment_id=latest.assignment_id,
|
|
1447
1454
|
failure_reason=smoke.failure_reason,
|
|
1455
|
+
operator_cancelled=(smoke.status or "") == "cancelled",
|
|
1456
|
+
exit_code=load_assignment_exit_code(smoke.assignment_id),
|
|
1448
1457
|
)
|
|
1449
1458
|
res.actions_taken.append(
|
|
1450
1459
|
f"resolved stuck test_state='running' from smoke child "
|
|
@@ -98,6 +98,11 @@ KIND_NETWORK = "network"
|
|
|
98
98
|
#: diagnosis of a lost Test-stage leg, never a verdict about the code
|
|
99
99
|
#: under test.
|
|
100
100
|
KIND_INFRA = "infra"
|
|
101
|
+
#: #3705: a Test-stage worker died with literally no `failure_reason` to
|
|
102
|
+
#: classify — not "classified as work because the text didn't match any
|
|
103
|
+
#: environmental pattern" (that case has real diagnostic text and stays
|
|
104
|
+
#: `KIND_WORK`), but zero evidence at all. See :func:`silent_test_death`.
|
|
105
|
+
KIND_SILENT = "silent"
|
|
101
106
|
KIND_WORK = "work"
|
|
102
107
|
|
|
103
108
|
#: HTTP statuses from the Claude API that mean "the provider, not the work".
|
|
@@ -353,6 +358,40 @@ def _usage_limit(reset_at_raw: str | None, signal: str) -> FailureClassification
|
|
|
353
358
|
)
|
|
354
359
|
|
|
355
360
|
|
|
361
|
+
def silent_test_death() -> FailureClassification:
|
|
362
|
+
"""#3705: classification for a Test-stage worker that died reporting
|
|
363
|
+
literally nothing — no usage-limit/API/network/infra signal and no
|
|
364
|
+
``failure_reason`` text at all for :func:`classify_failure` to have
|
|
365
|
+
scanned in the first place (a dead agent, a killed process group, a
|
|
366
|
+
terminal API error with the summary itself lost — the #1605 class).
|
|
367
|
+
|
|
368
|
+
Deliberately **not** a branch inside :func:`classify_failure`: that
|
|
369
|
+
function's "everything else is WORK, including no evidence" rule is
|
|
370
|
+
correct for a failure that has *some* terminal text which simply didn't
|
|
371
|
+
match an environmental pattern (that IS a real, if unrecognized, work
|
|
372
|
+
failure with diagnostic content worth handing a fix worker). This is
|
|
373
|
+
the narrower case of *zero* content — nothing to classify, let alone
|
|
374
|
+
hand to a fix worker — which only
|
|
375
|
+
:func:`coord.reconcile.propagate_smoke_terminal_failure` can tell apart
|
|
376
|
+
from the ordinary case (it alone sees whether ``failure_reason`` itself
|
|
377
|
+
was ever populated). Classified ``ENVIRONMENTAL`` so it gets the same
|
|
378
|
+
bounded clear-and-retry-then-park treatment as a usage limit or network
|
|
379
|
+
drop — a silent death is no more evidence of a code defect than either
|
|
380
|
+
of those, and parking (never a blind ``coord fix``) is the correct
|
|
381
|
+
escalation once the shared retry budget is exhausted.
|
|
382
|
+
"""
|
|
383
|
+
return FailureClassification(
|
|
384
|
+
failure_class=ENVIRONMENTAL,
|
|
385
|
+
kind=KIND_SILENT,
|
|
386
|
+
reason=(
|
|
387
|
+
"environmental (silent #1605 death): the Test-stage worker "
|
|
388
|
+
"died without recording any reason — no usage-limit, API, "
|
|
389
|
+
"network, or infra signal, and no terminal output at all"
|
|
390
|
+
),
|
|
391
|
+
signal=None,
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
|
|
356
395
|
def _reset_at_from_reason(reason: str | None) -> str | None:
|
|
357
396
|
"""Pull the raw reset string back out of a stamped ``failure_reason``."""
|
|
358
397
|
if not is_usage_limit_reason(reason):
|
|
@@ -4623,17 +4623,26 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
4623
4623
|
# can protect a still-live/already-passed sibling partition
|
|
4624
4624
|
# from a false aggregate failure instead of folding this
|
|
4625
4625
|
# leg's cancellation straight into the parent's verdict.
|
|
4626
|
+
# #3705: `exit_code` is the deciding evidence for the
|
|
4627
|
+
# silent-death branch — a leg that actually ran and exited
|
|
4628
|
+
# non-zero is a genuine work failure even with no classified
|
|
4629
|
+
# reason text, while a leg whose process left no exit status
|
|
4630
|
+
# at all is the #1605 class that gets a bounded retry. Same
|
|
4631
|
+
# forwarding as `coord.reconcile`'s own call site, so both
|
|
4632
|
+
# surfaces answer "silent or genuine?" identically.
|
|
4626
4633
|
propagate_smoke_terminal_failure(
|
|
4627
4634
|
parent_assignment_id=transition.assignment_id,
|
|
4628
4635
|
failure_reason=_failure_reason,
|
|
4629
4636
|
fanout_parent_id=parent_id,
|
|
4630
4637
|
operator_cancelled=entry.get("status") == "cancelled",
|
|
4638
|
+
exit_code=transition.exit_code,
|
|
4631
4639
|
)
|
|
4632
4640
|
finalize_smoke_fanout(parent_id)
|
|
4633
4641
|
else:
|
|
4634
4642
|
propagate_smoke_terminal_failure(
|
|
4635
4643
|
parent_assignment_id=parent_id,
|
|
4636
4644
|
failure_reason=_failure_reason,
|
|
4645
|
+
exit_code=transition.exit_code,
|
|
4637
4646
|
)
|
|
4638
4647
|
elif transition.event == EVENT_COMPLETION:
|
|
4639
4648
|
# #2188: a `deliverable:analysis` issue that legitimately ended with
|
|
@@ -590,6 +590,7 @@ def reconcile_completed_assignments(
|
|
|
590
590
|
propagate_smoke_terminal_failure(
|
|
591
591
|
parent_assignment_id=a.review_of_assignment_id,
|
|
592
592
|
failure_reason=_failure_reason,
|
|
593
|
+
exit_code=entry.get("exit_code"),
|
|
593
594
|
)
|
|
594
595
|
|
|
595
596
|
# #666 Gap A: best-effort cost/token capture from the agent completed
|
|
@@ -940,9 +941,14 @@ def _environmental_cause_phrase(classification: "FailureClassification") -> str:
|
|
|
940
941
|
KIND_API_ERROR,
|
|
941
942
|
KIND_INFRA,
|
|
942
943
|
KIND_NETWORK,
|
|
944
|
+
KIND_SILENT,
|
|
943
945
|
KIND_USAGE_LIMIT,
|
|
944
946
|
)
|
|
945
947
|
|
|
948
|
+
if classification.kind == KIND_SILENT:
|
|
949
|
+
# #3705: a Test-stage worker that died reporting nothing at all —
|
|
950
|
+
# not a provider signal, just no diagnostic to hand anyone.
|
|
951
|
+
return "a Test-stage worker repeatedly dying with no reason recorded (#1605)"
|
|
946
952
|
if classification.kind == KIND_USAGE_LIMIT:
|
|
947
953
|
return "an exhausted account usage limit"
|
|
948
954
|
if classification.kind == KIND_API_ERROR:
|
|
@@ -969,6 +975,7 @@ def propagate_smoke_terminal_failure(
|
|
|
969
975
|
environmental: bool | None = None,
|
|
970
976
|
fanout_parent_id: str | None = None,
|
|
971
977
|
operator_cancelled: bool = False,
|
|
978
|
+
exit_code: int | None = None,
|
|
972
979
|
) -> None:
|
|
973
980
|
"""#1605: resolve a work row's ``test_state`` when its Test-stage
|
|
974
981
|
(``type="smoke"``) child dies without ever reporting pass/fail.
|
|
@@ -1036,6 +1043,30 @@ def propagate_smoke_terminal_failure(
|
|
|
1036
1043
|
``test_state="failed"`` exactly like a normal non-zero-exit smoke
|
|
1037
1044
|
completion already does (`coord/notify.py`'s completion handler), so
|
|
1038
1045
|
the existing bounded `coord fix` loop picks it up from there.
|
|
1046
|
+
* **silent** (#3705: *failure_reason* itself is empty — no usage-limit,
|
|
1047
|
+
API, network, or infra token to classify, because there is no text at
|
|
1048
|
+
all) — this is the #1605 class the module docstring above describes,
|
|
1049
|
+
and it is treated like **environmental**, not **work**: there is
|
|
1050
|
+
nothing for a `coord fix` worker to act on, so dispatching one only
|
|
1051
|
+
adds a full Work→Test→Review cycle onto a row whose original Work may
|
|
1052
|
+
already be approved, for zero actionable content. Reclassified via
|
|
1053
|
+
:func:`coord.failure_class.silent_test_death` and folded into the same
|
|
1054
|
+
bounded clear-and-retry-then-park machinery as a genuine environmental
|
|
1055
|
+
death, sharing its budget and tally. Deliberately distinct from
|
|
1056
|
+
**work**'s "no RECOGNIZED signal" case, which still has real
|
|
1057
|
+
diagnostic text worth a fix worker's time and keeps its current
|
|
1058
|
+
``test_state="failed"`` handling unchanged.
|
|
1059
|
+
|
|
1060
|
+
*exit_code* (#3705) is the deciding evidence for that **silent** branch,
|
|
1061
|
+
and every automatic caller must forward it: the dying worker's own
|
|
1062
|
+
process exit status, when the agent recorded one. A non-zero exit means
|
|
1063
|
+
the worker ran and returned an error — real evidence of a work failure,
|
|
1064
|
+
even with no reason text — so only ``exit_code in {0, None}`` reclassifies
|
|
1065
|
+
as silent. *operator_cancelled* overrides this, since a `coord stop`
|
|
1066
|
+
kills the process group and its exit status reflects the operator's
|
|
1067
|
+
signal rather than the code under test. Leaving *exit_code* unset means
|
|
1068
|
+
"no exit status is known", which is itself the #1605 shape, so a caller
|
|
1069
|
+
that CAN see one and omits it would reclassify genuine failures as silent.
|
|
1039
1070
|
|
|
1040
1071
|
*environmental* (#2275) overrides that classification when the CALLER
|
|
1041
1072
|
already knows the answer. Default ``None`` means "classify from
|
|
@@ -1134,6 +1165,48 @@ def propagate_smoke_terminal_failure(
|
|
|
1134
1165
|
if environmental is None:
|
|
1135
1166
|
is_environmental = classification.is_environmental
|
|
1136
1167
|
cause = classification.reason
|
|
1168
|
+
if (
|
|
1169
|
+
not is_environmental
|
|
1170
|
+
and not (failure_reason or "").strip()
|
|
1171
|
+
and (operator_cancelled or exit_code in (0, None))
|
|
1172
|
+
):
|
|
1173
|
+
# #3705: `classify_failure` correctly calls this WORK — its own
|
|
1174
|
+
# "no evidence at all defaults to WORK" rule — but that rule is
|
|
1175
|
+
# about an UNRECOGNIZED signal, not an ABSENT one. There is a
|
|
1176
|
+
# real difference between "the worker's own terminal text didn't
|
|
1177
|
+
# match any environmental pattern" (real diagnostic content, a
|
|
1178
|
+
# genuine work failure worth a fix worker's time) and "there is
|
|
1179
|
+
# no `failure_reason` text at all" (a dead agent, a killed
|
|
1180
|
+
# process group — the #1605 class this function exists for,
|
|
1181
|
+
# with nothing for a fix worker to act on). Only this caller can
|
|
1182
|
+
# tell the two apart, since only it sees whether
|
|
1183
|
+
# *failure_reason* itself was ever populated.
|
|
1184
|
+
#
|
|
1185
|
+
# The additional *exit_code* guard keeps a non-zero exit code
|
|
1186
|
+
# (e.g. exit_code=1: the `claude -p` process actually ran and
|
|
1187
|
+
# returned an error) as a genuine WORK failure even when the
|
|
1188
|
+
# agent captured no classified reason text — a non-zero exit IS
|
|
1189
|
+
# a signal, just one without a human-readable reason string.
|
|
1190
|
+
# Only `exit_code in {0, None}` qualifies as truly silent.
|
|
1191
|
+
#
|
|
1192
|
+
# *operator_cancelled* overrides that guard: a `coord stop` kills
|
|
1193
|
+
# the worker's process group, so its exit status reports the
|
|
1194
|
+
# OPERATOR'S signal, not a verdict on the code under test. Every
|
|
1195
|
+
# cancellation is therefore silent by construction, whatever exit
|
|
1196
|
+
# code the kill happened to leave behind — the same reasoning as
|
|
1197
|
+
# the sibling-protection branch above, applied to a solo leg that
|
|
1198
|
+
# has no live sibling left to protect.
|
|
1199
|
+
# Treat all of the above like an environmental death: bounded
|
|
1200
|
+
# clear-and-retry of the Test stage, parking (never a blind
|
|
1201
|
+
# `coord fix`) once the shared #3315 budget is exhausted —
|
|
1202
|
+
# instead of ever recording a `test_state="failed"` work verdict
|
|
1203
|
+
# with a synthetic placeholder reason and no actual failure
|
|
1204
|
+
# behind it.
|
|
1205
|
+
from coord.failure_class import silent_test_death # noqa: PLC0415
|
|
1206
|
+
|
|
1207
|
+
classification = silent_test_death()
|
|
1208
|
+
is_environmental = True
|
|
1209
|
+
cause = classification.reason
|
|
1137
1210
|
else:
|
|
1138
1211
|
is_environmental = bool(environmental)
|
|
1139
1212
|
cause = failure_reason or classification.reason
|
|
@@ -4587,6 +4587,51 @@ def load_assignment_test_reason(assignment_id: str) -> str | None:
|
|
|
4587
4587
|
return row["test_reason"] if hasattr(row, "keys") else row[0]
|
|
4588
4588
|
|
|
4589
4589
|
|
|
4590
|
+
def load_assignment_exit_code(assignment_id: str) -> int | None:
|
|
4591
|
+
"""#3705: the recorded process ``exit_code`` for one assignment.
|
|
4592
|
+
|
|
4593
|
+
The single-row read that lets a caller holding only an
|
|
4594
|
+
:class:`coord.models.Assignment` (whose projection carries no
|
|
4595
|
+
``exit_code``) answer "did this worker actually run and return an error?"
|
|
4596
|
+
— the deciding evidence
|
|
4597
|
+
:func:`coord.reconcile.propagate_smoke_terminal_failure` needs to tell a
|
|
4598
|
+
genuine work failure from a silent #1605 death.
|
|
4599
|
+
|
|
4600
|
+
Same daemon-first, local-fallback routing as
|
|
4601
|
+
:func:`load_assignment_test_reason`. Returns ``None`` when the row is
|
|
4602
|
+
absent, the column is NULL (the agent recorded no exit status), or a
|
|
4603
|
+
remote read failed — all three mean "no exit status I can see", which is
|
|
4604
|
+
itself the silent shape, so callers must treat it as absence of evidence
|
|
4605
|
+
rather than as a successful exit.
|
|
4606
|
+
"""
|
|
4607
|
+
if not assignment_id:
|
|
4608
|
+
return None
|
|
4609
|
+
svc = _board_service()
|
|
4610
|
+
if svc is not None:
|
|
4611
|
+
try:
|
|
4612
|
+
from coord.client import fetch_assignment # noqa: PLC0415
|
|
4613
|
+
|
|
4614
|
+
row = fetch_assignment(svc, assignment_id)
|
|
4615
|
+
if row is not None:
|
|
4616
|
+
code = row.get("exit_code")
|
|
4617
|
+
return int(code) if code is not None else None
|
|
4618
|
+
return None
|
|
4619
|
+
except Exception: # noqa: BLE001 — degraded fallback, never blocking
|
|
4620
|
+
return None
|
|
4621
|
+
try:
|
|
4622
|
+
conn = get_connection()
|
|
4623
|
+
row = sql.execute(conn,
|
|
4624
|
+
"SELECT exit_code FROM assignments WHERE assignment_id=?",
|
|
4625
|
+
(assignment_id,),
|
|
4626
|
+
).fetchone()
|
|
4627
|
+
except Exception: # noqa: BLE001
|
|
4628
|
+
return None
|
|
4629
|
+
if row is None:
|
|
4630
|
+
return None
|
|
4631
|
+
code = row["exit_code"] if hasattr(row, "keys") else row[0]
|
|
4632
|
+
return int(code) if code is not None else None
|
|
4633
|
+
|
|
4634
|
+
|
|
4590
4635
|
def load_assignment_test_state(assignment_id: str) -> str | None:
|
|
4591
4636
|
"""#2244: the current ``test_state`` for one assignment.
|
|
4592
4637
|
|
|
@@ -1712,10 +1712,9 @@ def test_stuck_test_state_with_terminal_smoke_child_is_recovered(monkeypatch, co
|
|
|
1712
1712
|
calls: list[dict] = []
|
|
1713
1713
|
monkeypatch.setattr(
|
|
1714
1714
|
"coord.reconcile.propagate_smoke_terminal_failure",
|
|
1715
|
-
lambda
|
|
1716
|
-
{"parent_assignment_id": parent_assignment_id, "failure_reason": failure_reason}
|
|
1717
|
-
),
|
|
1715
|
+
lambda **kw: calls.append(kw),
|
|
1718
1716
|
)
|
|
1717
|
+
monkeypatch.setattr("coord.state.load_assignment_exit_code", lambda aid: None)
|
|
1719
1718
|
work = _assign(aid="w1", typ="work", status="done")
|
|
1720
1719
|
work.test_state = "running"
|
|
1721
1720
|
smoke = _assign(
|
|
@@ -1728,12 +1727,75 @@ def test_stuck_test_state_with_terminal_smoke_child_is_recovered(monkeypatch, co
|
|
|
1728
1727
|
|
|
1729
1728
|
assert any("test_state='running'" in f and "s1" in f for f in res.findings)
|
|
1730
1729
|
assert calls == [
|
|
1731
|
-
{
|
|
1730
|
+
{
|
|
1731
|
+
"parent_assignment_id": "w1",
|
|
1732
|
+
"failure_reason": "api_error: aborted_streaming",
|
|
1733
|
+
"operator_cancelled": False,
|
|
1734
|
+
"exit_code": None,
|
|
1735
|
+
}
|
|
1732
1736
|
]
|
|
1733
1737
|
assert any("resolved stuck test_state" in a for a in res.actions_taken)
|
|
1734
1738
|
assert res.recovered is True
|
|
1735
1739
|
|
|
1736
1740
|
|
|
1741
|
+
def test_stuck_test_state_forwards_the_smoke_child_exit_code(monkeypatch, config) -> None:
|
|
1742
|
+
"""#3705: a smoke child that ran and exited non-zero is a genuine work
|
|
1743
|
+
failure even with no reason text recorded, so the repair must forward the
|
|
1744
|
+
child's own exit status — the board projection does not carry it, and
|
|
1745
|
+
omitting it would reclassify the failure as a silent #1605 death and earn
|
|
1746
|
+
it a bounded Test-stage retry instead."""
|
|
1747
|
+
_stub(monkeypatch, session="dead")
|
|
1748
|
+
calls: list[dict] = []
|
|
1749
|
+
monkeypatch.setattr(
|
|
1750
|
+
"coord.reconcile.propagate_smoke_terminal_failure",
|
|
1751
|
+
lambda **kw: calls.append(kw),
|
|
1752
|
+
)
|
|
1753
|
+
monkeypatch.setattr(
|
|
1754
|
+
"coord.state.load_assignment_exit_code",
|
|
1755
|
+
lambda aid: 1 if aid == "s1" else None,
|
|
1756
|
+
)
|
|
1757
|
+
work = _assign(aid="w1", typ="work", status="done")
|
|
1758
|
+
work.test_state = "running"
|
|
1759
|
+
smoke = _assign(aid="s1", typ="smoke", status="failed", review_of="w1")
|
|
1760
|
+
board = Board(completed=[work, smoke])
|
|
1761
|
+
|
|
1762
|
+
diagnose.diagnose_stage(board, config, "api", 42, "test")
|
|
1763
|
+
|
|
1764
|
+
assert calls and calls[0]["exit_code"] == 1, (
|
|
1765
|
+
"the smoke child's recorded exit status must reach "
|
|
1766
|
+
f"propagate_smoke_terminal_failure — got {calls!r}"
|
|
1767
|
+
)
|
|
1768
|
+
assert calls[0]["operator_cancelled"] is False
|
|
1769
|
+
|
|
1770
|
+
|
|
1771
|
+
def test_stuck_test_state_marks_a_cancelled_smoke_child_operator_cancelled(
|
|
1772
|
+
monkeypatch, config
|
|
1773
|
+
) -> None:
|
|
1774
|
+
"""#3705/#3333: an operator `coord stop` leaves the smoke row `cancelled`
|
|
1775
|
+
and its exit status is the kill signal, not a verdict on the code under
|
|
1776
|
+
test — so the repair must flag the cancellation and keep the clear-and-retry
|
|
1777
|
+
treatment rather than letting the signal's exit code read as a work
|
|
1778
|
+
failure."""
|
|
1779
|
+
_stub(monkeypatch, session="dead")
|
|
1780
|
+
calls: list[dict] = []
|
|
1781
|
+
monkeypatch.setattr(
|
|
1782
|
+
"coord.reconcile.propagate_smoke_terminal_failure",
|
|
1783
|
+
lambda **kw: calls.append(kw),
|
|
1784
|
+
)
|
|
1785
|
+
monkeypatch.setattr("coord.state.load_assignment_exit_code", lambda aid: -15)
|
|
1786
|
+
work = _assign(aid="w1", typ="work", status="done")
|
|
1787
|
+
work.test_state = "running"
|
|
1788
|
+
smoke = _assign(aid="s1", typ="smoke", status="cancelled", review_of="w1")
|
|
1789
|
+
board = Board(completed=[work, smoke])
|
|
1790
|
+
|
|
1791
|
+
diagnose.diagnose_stage(board, config, "api", 42, "test")
|
|
1792
|
+
|
|
1793
|
+
assert calls and calls[0]["operator_cancelled"] is True, (
|
|
1794
|
+
f"a cancelled smoke child must be reported as operator-cancelled — got {calls!r}"
|
|
1795
|
+
)
|
|
1796
|
+
assert calls[0]["exit_code"] == -15
|
|
1797
|
+
|
|
1798
|
+
|
|
1737
1799
|
def test_stuck_test_state_dry_run_reports_without_writing(monkeypatch, config) -> None:
|
|
1738
1800
|
_stub(monkeypatch, session="dead")
|
|
1739
1801
|
|
|
@@ -32,6 +32,7 @@ from coord.failure_class import (
|
|
|
32
32
|
KIND_API_ERROR,
|
|
33
33
|
KIND_INFRA,
|
|
34
34
|
KIND_NETWORK,
|
|
35
|
+
KIND_SILENT,
|
|
35
36
|
KIND_USAGE_LIMIT,
|
|
36
37
|
KIND_WORK,
|
|
37
38
|
WORK,
|
|
@@ -45,6 +46,7 @@ from coord.failure_class import (
|
|
|
45
46
|
parse_reset_at,
|
|
46
47
|
plan_usage_limit_resume,
|
|
47
48
|
probe_environment_liveness,
|
|
49
|
+
silent_test_death,
|
|
48
50
|
)
|
|
49
51
|
from coord.worker_events import UsageLimitKill, format_usage_limit_reason
|
|
50
52
|
|
|
@@ -822,3 +824,21 @@ def test_classification_is_frozen() -> None:
|
|
|
822
824
|
with pytest.raises(Exception):
|
|
823
825
|
c.failure_class = WORK # type: ignore[misc]
|
|
824
826
|
assert isinstance(c, FailureClassification)
|
|
827
|
+
|
|
828
|
+
|
|
829
|
+
def test_silent_test_death_is_environmental_and_distinct_from_plain_work() -> None:
|
|
830
|
+
"""#3705: a Test-stage worker that died reporting literally nothing (no
|
|
831
|
+
`failure_reason` at all) classifies ENVIRONMENTAL via
|
|
832
|
+
:func:`silent_test_death`, with its own `KIND_SILENT` — distinct from
|
|
833
|
+
the ordinary `classify_failure(failure_reason=None)` WORK default, which
|
|
834
|
+
stays unchanged for every other caller (notably the WORK-stage retry
|
|
835
|
+
logic in `coord/drive.py`, out of scope for this Test-stage-only fix)."""
|
|
836
|
+
c = silent_test_death()
|
|
837
|
+
assert c.failure_class == ENVIRONMENTAL
|
|
838
|
+
assert c.kind == KIND_SILENT
|
|
839
|
+
assert c.is_environmental
|
|
840
|
+
assert "1605" in c.reason
|
|
841
|
+
|
|
842
|
+
# The ordinary classifier is untouched: no evidence still defaults WORK.
|
|
843
|
+
assert classify_failure(failure_reason=None).failure_class == WORK
|
|
844
|
+
assert classify_failure(failure_reason=None).kind == KIND_WORK
|
|
@@ -2849,13 +2849,15 @@ class TestSmokeCompletionVerdict:
|
|
|
2849
2849
|
) -> None:
|
|
2850
2850
|
"""#3182 review (non-blocking): the `EVENT_FAILURE` branch in
|
|
2851
2851
|
`post_transition` mirrors the `EVENT_COMPLETION` one above — a
|
|
2852
|
-
capability-partition leg whose WORKER died
|
|
2853
|
-
|
|
2854
|
-
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
-
leg
|
|
2858
|
-
|
|
2852
|
+
capability-partition leg whose WORKER died resolves onto its OWN row
|
|
2853
|
+
via `propagate_smoke_terminal_failure`, never straight onto the
|
|
2854
|
+
shared parent, then folds through `finalize_smoke_fanout` exactly
|
|
2855
|
+
like a leg that reports a real `SMOKE: fail`.
|
|
2856
|
+
|
|
2857
|
+
This leg exited NON-ZERO (#3705): it actually ran and returned an
|
|
2858
|
+
error, so it is a genuine work failure and must fold into the
|
|
2859
|
+
aggregate as `failed` — the silent #1605 retry path is only for a leg
|
|
2860
|
+
that left no exit status at all (covered by the next test)."""
|
|
2859
2861
|
from coord.notify import ( # noqa: PLC0415
|
|
2860
2862
|
EVENT_COMPLETION,
|
|
2861
2863
|
EVENT_FAILURE,
|
|
@@ -2938,7 +2940,11 @@ class TestSmokeCompletionVerdict:
|
|
|
2938
2940
|
|
|
2939
2941
|
# The leg's OWN row carries the terminal verdict — never a straight
|
|
2940
2942
|
# write onto the shared parent (#1797's shape).
|
|
2941
|
-
assert load_assignment_test_state("leg-win2") == "failed"
|
|
2943
|
+
assert load_assignment_test_state("leg-win2") == "failed", (
|
|
2944
|
+
"a leg that ran and exited non-zero is a genuine work failure "
|
|
2945
|
+
"even with no classified reason text — got "
|
|
2946
|
+
f"{load_assignment_test_state('leg-win2')!r}"
|
|
2947
|
+
)
|
|
2942
2948
|
|
|
2943
2949
|
conn = get_connection()
|
|
2944
2950
|
row = conn.execute(
|
|
@@ -2954,6 +2960,93 @@ class TestSmokeCompletionVerdict:
|
|
|
2954
2960
|
f"{row['test_reason']!r}"
|
|
2955
2961
|
)
|
|
2956
2962
|
|
|
2963
|
+
def test_silent_fanout_leg_death_clears_the_leg_for_a_bounded_retry(
|
|
2964
|
+
self, coord_db, tmp_path,
|
|
2965
|
+
) -> None:
|
|
2966
|
+
"""#3705 on the live, event-driven path: a fan-out leg whose worker
|
|
2967
|
+
died leaving NO exit status and NO classifiable reason (a reaped
|
|
2968
|
+
agent, a lost process group — the #1605 class) must be cleared for a
|
|
2969
|
+
bounded automatic retry of its partition, never recorded as a work
|
|
2970
|
+
failure with a synthetic placeholder reason behind it. That synthetic
|
|
2971
|
+
verdict is what used to dispatch a full blind Work→Test→Review
|
|
2972
|
+
smoke-fix cycle for zero actionable content.
|
|
2973
|
+
|
|
2974
|
+
`coord.notify`'s `_failure_reason` is built only from a fixed set of
|
|
2975
|
+
coordinator-authored structured fields (usage-limit, API error, …) —
|
|
2976
|
+
a worker's own free-text `entry["error"]` never feeds it, by design
|
|
2977
|
+
(`classify_failure`'s vocabulary is restricted to named wire tokens,
|
|
2978
|
+
never arbitrary worker prose) — so this shape reaches
|
|
2979
|
+
`propagate_smoke_terminal_failure` with an empty `failure_reason`."""
|
|
2980
|
+
from coord.notify import EVENT_FAILURE, Transition, post_transition # noqa: PLC0415
|
|
2981
|
+
from coord.state import ( # noqa: PLC0415
|
|
2982
|
+
get_connection,
|
|
2983
|
+
load_assignment_test_reason,
|
|
2984
|
+
load_assignment_test_state,
|
|
2985
|
+
record_test_verdict,
|
|
2986
|
+
)
|
|
2987
|
+
|
|
2988
|
+
self._record_work("work-silent")
|
|
2989
|
+
self._record_fanout_leg(
|
|
2990
|
+
"leg-gtk-silent", parent_id="work-silent", capabilities=("gtk",),
|
|
2991
|
+
)
|
|
2992
|
+
self._record_fanout_leg(
|
|
2993
|
+
"leg-win-silent", parent_id="work-silent", capabilities=("windows",),
|
|
2994
|
+
)
|
|
2995
|
+
record_test_verdict(
|
|
2996
|
+
assignment_id="work-silent", test_state="running",
|
|
2997
|
+
test_reason=(
|
|
2998
|
+
"[[smoke-fanout:leg-gtk-silent=gtk,leg-win-silent=windows]]\n"
|
|
2999
|
+
"Test stage running across 2 capability-partition leg(s) "
|
|
3000
|
+
"(#3182): [gtk]; [windows]."
|
|
3001
|
+
),
|
|
3002
|
+
)
|
|
3003
|
+
|
|
3004
|
+
failure = Transition(
|
|
3005
|
+
assignment_id="leg-win-silent", machine_name="dell64",
|
|
3006
|
+
repo_name="api", issue_number=42, event=EVENT_FAILURE,
|
|
3007
|
+
exit_code=None,
|
|
3008
|
+
)
|
|
3009
|
+
failure_record = {
|
|
3010
|
+
"repo_github": "acme/api", "type": "smoke",
|
|
3011
|
+
"review_of_assignment_id": "work-silent",
|
|
3012
|
+
"issue_title": "[smoke:windows] Fix thing",
|
|
3013
|
+
}
|
|
3014
|
+
failure_entry = {
|
|
3015
|
+
"started_at": 1000.0, "finished_at": 1010.0,
|
|
3016
|
+
"branch": "issue-42-fix-thing", "log_path": None,
|
|
3017
|
+
}
|
|
3018
|
+
with (
|
|
3019
|
+
patch("coord.notify.post_completion"),
|
|
3020
|
+
patch("coord.notify.post_failure"),
|
|
3021
|
+
patch("coord.notify.mark_notified"),
|
|
3022
|
+
patch("coord.notify._capture_cost"),
|
|
3023
|
+
patch("coord.notify._capture_smoke_tests"),
|
|
3024
|
+
patch("coord.notify._capture_completion_summary"),
|
|
3025
|
+
patch("coord.notify._capture_claude_session_id"),
|
|
3026
|
+
):
|
|
3027
|
+
post_transition(failure, failure_record, failure_entry)
|
|
3028
|
+
|
|
3029
|
+
assert load_assignment_test_state("leg-win-silent") is None, (
|
|
3030
|
+
"a leg that died with no exit status and no reason must clear "
|
|
3031
|
+
"for automatic retry, never fail the leg outright — got "
|
|
3032
|
+
f"{load_assignment_test_state('leg-win-silent')!r}"
|
|
3033
|
+
)
|
|
3034
|
+
assert "#1605" in (load_assignment_test_reason("leg-win-silent") or "")
|
|
3035
|
+
|
|
3036
|
+
conn = get_connection()
|
|
3037
|
+
row = conn.execute(
|
|
3038
|
+
"SELECT test_state, test_reason FROM assignments WHERE assignment_id=?",
|
|
3039
|
+
("work-silent",),
|
|
3040
|
+
).fetchone()
|
|
3041
|
+
assert row["test_state"] == "running", (
|
|
3042
|
+
"a silent #1605 leg death must hold the fan-out's aggregate at "
|
|
3043
|
+
"'running' — not everyone has reported in yet — rather than "
|
|
3044
|
+
f"fold a synthetic failure into it — got {row['test_state']!r}"
|
|
3045
|
+
)
|
|
3046
|
+
assert "environmental" in (row["test_reason"] or "").lower(), (
|
|
3047
|
+
f"expected the #3315 environmental tally — got {row['test_reason']!r}"
|
|
3048
|
+
)
|
|
3049
|
+
|
|
2957
3050
|
def test_operator_cancelled_leg_does_not_fail_the_parent_while_sibling_runs(
|
|
2958
3051
|
self, coord_db,
|
|
2959
3052
|
) -> None:
|
|
@@ -3045,13 +3138,19 @@ class TestSmokeCompletionVerdict:
|
|
|
3045
3138
|
f"folded in as a verdict; got {row['test_state']!r}"
|
|
3046
3139
|
)
|
|
3047
3140
|
|
|
3048
|
-
def
|
|
3141
|
+
def test_operator_cancelled_leg_clears_for_retry_when_no_sibling_survives(
|
|
3049
3142
|
self, coord_db,
|
|
3050
3143
|
) -> None:
|
|
3051
|
-
"""The guard only protects a LIVE/passed sibling. When every
|
|
3052
|
-
leg is already a non-verdict terminal row too (nothing left to
|
|
3144
|
+
"""The sibling guard only protects a LIVE/passed sibling. When every
|
|
3145
|
+
other leg is already a non-verdict terminal row too (nothing left to
|
|
3053
3146
|
protect), an operator cancellation falls through to the ordinary
|
|
3054
|
-
classification
|
|
3147
|
+
classification — where #3705 still treats it as silent: a `coord
|
|
3148
|
+
stop` leaves no `failure_reason` text for `classify_failure` to scan,
|
|
3149
|
+
and the non-zero exit status it leaves behind is the OPERATOR'S kill
|
|
3150
|
+
signal (a SIGTERM'd process group), never a verdict on the code under
|
|
3151
|
+
test. So the partition is cleared for a bounded automatic retry
|
|
3152
|
+
exactly like the sibling-protection branch does, rather than recorded
|
|
3153
|
+
as a work failure with nothing actionable behind it."""
|
|
3055
3154
|
from coord.notify import EVENT_FAILURE, Transition, post_transition # noqa: PLC0415
|
|
3056
3155
|
from coord.state import ( # noqa: PLC0415
|
|
3057
3156
|
get_connection,
|
|
@@ -3074,7 +3173,7 @@ class TestSmokeCompletionVerdict:
|
|
|
3074
3173
|
|
|
3075
3174
|
cancel = Transition(
|
|
3076
3175
|
assignment_id="leg-macos-solo", machine_name="macmini", repo_name="api",
|
|
3077
|
-
issue_number=42, event=EVENT_FAILURE, exit_code
|
|
3176
|
+
issue_number=42, event=EVENT_FAILURE, exit_code=-15,
|
|
3078
3177
|
)
|
|
3079
3178
|
cancel_record = {
|
|
3080
3179
|
"repo_github": "acme/api", "type": "smoke",
|
|
@@ -3097,13 +3196,22 @@ class TestSmokeCompletionVerdict:
|
|
|
3097
3196
|
):
|
|
3098
3197
|
post_transition(cancel, cancel_record, cancel_entry)
|
|
3099
3198
|
|
|
3100
|
-
|
|
3199
|
+
# No structured or free-text reason survives a `coord stop` cancel,
|
|
3200
|
+
# and its SIGTERM exit status says nothing about the code, so the
|
|
3201
|
+
# fall-through classification treats this exactly like any other
|
|
3202
|
+
# silent #1605 death: clear the leg for a bounded automatic retry
|
|
3203
|
+
# rather than fail it outright with nothing actionable.
|
|
3204
|
+
assert load_assignment_test_state("leg-macos-solo") is None
|
|
3101
3205
|
conn = get_connection()
|
|
3102
3206
|
row = conn.execute(
|
|
3103
|
-
"SELECT test_state FROM assignments WHERE assignment_id=?",
|
|
3207
|
+
"SELECT test_state, test_reason FROM assignments WHERE assignment_id=?",
|
|
3104
3208
|
("work-cancel-solo",),
|
|
3105
3209
|
).fetchone()
|
|
3106
|
-
assert row["test_state"] == "
|
|
3210
|
+
assert row["test_state"] == "running", (
|
|
3211
|
+
"the fan-out aggregate must stay 'running' while the solo leg "
|
|
3212
|
+
f"is retried — got {row['test_state']!r}"
|
|
3213
|
+
)
|
|
3214
|
+
assert "environmental" in (row["test_reason"] or "").lower()
|
|
3107
3215
|
|
|
3108
3216
|
def test_interactive_smoke_mode_not_auto_certified(
|
|
3109
3217
|
self, coord_db
|