code-coordinator 0.5.522__tar.gz → 0.5.523__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.522 → code_coordinator-0.5.523}/PKG-INFO +1 -1
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/diagnose.py +526 -30
- code_coordinator-0.5.523/tests/test_stuck_test_state_watchdog_2803.py +1092 -0
- code_coordinator-0.5.522/tests/test_stuck_test_state_watchdog_2803.py +0 -456
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/.gitignore +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/CLAUDE.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/GOAL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/LICENSE +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/MANIFEST.in +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/README.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/__init__.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/agent.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/audit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/backup.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/block_log.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/board_service.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/brain.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/claim.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/cli.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/client.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/codegen.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/comments.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/config.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dao.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/db.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/deps.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/drive.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/events.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/filelock.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/freshness.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/gates.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/goal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/context.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/models.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/render.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/health/units.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/hooks.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/interactive.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/models.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/network.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/notify.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/openapi.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/parentage.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/plans.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/progress.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/release_window.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/reports.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/review.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/self_health.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/smoke.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/split_work.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/sql.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/state.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/test_author.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/test_report.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/usage.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/install-agent.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/pyproject.toml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/setup.cfg +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/__init__.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/backends.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/conftest.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_client.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_config.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_db.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_events.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_init.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_models.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_network.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_review.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_session.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_split.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_state.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.522 → code_coordinator-0.5.523}/tests/write_parity.py +0 -0
|
@@ -2340,6 +2340,71 @@ class StuckTestStateHeal:
|
|
|
2340
2340
|
action: str = ""
|
|
2341
2341
|
|
|
2342
2342
|
|
|
2343
|
+
#: Sentinel anchor id for :func:`_stuck_test_state_heal_marker` /
|
|
2344
|
+
#: :func:`_already_healed_against` when there is no Test-stage child at all
|
|
2345
|
+
#: (:func:`_latest_smoke_child` returned ``None``) — the "no child found"
|
|
2346
|
+
#: classification in :func:`sweep_stuck_test_state_rows` has no real
|
|
2347
|
+
#: assignment id to key the re-heal guard on, so it uses this fixed string
|
|
2348
|
+
#: instead. Never collides with a real assignment id (those are
|
|
2349
|
+
#: ``uuid.uuid4().hex``-derived, never this literal).
|
|
2350
|
+
_NO_SMOKE_CHILD_MARKER_ID = "no-smoke-child"
|
|
2351
|
+
|
|
2352
|
+
|
|
2353
|
+
def _stuck_test_state_heal_marker(child_assignment_id: str) -> str:
|
|
2354
|
+
"""The marker embedded in a parent row's ``test_reason`` recording that
|
|
2355
|
+
*this exact* Test-stage child (or, for
|
|
2356
|
+
:data:`_NO_SMOKE_CHILD_MARKER_ID`, the "no child at all" case) was
|
|
2357
|
+
already resolved by this sweep (#3453).
|
|
2358
|
+
|
|
2359
|
+
Before this, a parent whose ``test_state`` reads ``"running"`` again
|
|
2360
|
+
(whatever re-stamps it without ever dispatching a fresh Test-stage
|
|
2361
|
+
child — #3453 does not chase that separate bug, only guards against its
|
|
2362
|
+
consequence here) with the SAME latest child still on file (or still no
|
|
2363
|
+
child at all) would be "healed" all over again on the very next tick:
|
|
2364
|
+
:func:`_latest_smoke_child` has nothing new to return, so the anchor is
|
|
2365
|
+
still hours past :data:`STUCK_TEST_STATE_GRACE_SECONDS` and the row
|
|
2366
|
+
re-heals immediately — quadraui#1077 posted ``stuck_test_state_healed``
|
|
2367
|
+
five times in five minutes naming the identical child, each firing
|
|
2368
|
+
spending one more tick of the #3315 environmental-retry budget until it
|
|
2369
|
+
parked a branch whose Test stage had, in fact, already passed.
|
|
2370
|
+
|
|
2371
|
+
Checked via :func:`_already_healed_against` before any write for this
|
|
2372
|
+
child is attempted — a parent whose current ``test_reason`` already
|
|
2373
|
+
carries this marker for the CURRENT latest child (or the "no child"
|
|
2374
|
+
sentinel) is left alone: no write, no tally, no duplicate heal.
|
|
2375
|
+
|
|
2376
|
+
Every classification branch in :func:`sweep_stuck_test_state_rows` embeds
|
|
2377
|
+
this marker and checks the guard — not just the ``status=="done"`` one.
|
|
2378
|
+
The #3182 fan-out sub-case cannot build its own ``test_reason`` (that text
|
|
2379
|
+
belongs to :func:`coord.smoke.finalize_smoke_fanout`), so it stamps the
|
|
2380
|
+
marker on in a second, verdict-preserving write via
|
|
2381
|
+
:func:`_stamp_fanout_heal_marker`. The ``failed``/``cancelled`` branch's
|
|
2382
|
+
recovery text is folded
|
|
2383
|
+
through :func:`coord.reconcile.propagate_smoke_terminal_failure`, which
|
|
2384
|
+
classifies environmental-vs-work itself (#1590): when that classifies as
|
|
2385
|
+
WORK, the marker (embedded in the ``failure_reason`` passed through)
|
|
2386
|
+
lands verbatim in the row's final ``test_reason`` and the guard is fully
|
|
2387
|
+
effective on the next tick; when it classifies as ENVIRONMENTAL instead,
|
|
2388
|
+
that function's own environmental-branch text is built from its
|
|
2389
|
+
*classification*, not the raw ``failure_reason`` string handed to it, so
|
|
2390
|
+
the marker does not survive into the written ``test_reason`` for that
|
|
2391
|
+
sub-case. That narrower gap is a `coord.reconcile` seam limitation, not
|
|
2392
|
+
something this module can close without changing a function shared by
|
|
2393
|
+
`_recover_test`/`_reconcile_no_agent_record` — tracked, not silently
|
|
2394
|
+
dropped.
|
|
2395
|
+
"""
|
|
2396
|
+
return f"[[stuck-test-state-healed:{child_assignment_id}]]"
|
|
2397
|
+
|
|
2398
|
+
|
|
2399
|
+
def _already_healed_against(test_reason: str | None, child_assignment_id: str) -> bool:
|
|
2400
|
+
"""``True`` when *test_reason* already carries the #3453 marker for
|
|
2401
|
+
*child_assignment_id* — i.e. this sweep already resolved the parent
|
|
2402
|
+
against this exact Test-stage child (or, for
|
|
2403
|
+
:data:`_NO_SMOKE_CHILD_MARKER_ID`, the "no child at all" case) once and
|
|
2404
|
+
must not do it again."""
|
|
2405
|
+
return bool(test_reason) and _stuck_test_state_heal_marker(child_assignment_id) in test_reason
|
|
2406
|
+
|
|
2407
|
+
|
|
2343
2408
|
def _latest_smoke_child(board: "Board", parent_id: str) -> "Assignment | None":
|
|
2344
2409
|
"""The most recently dispatched ``type="smoke"`` row for *parent_id*, or
|
|
2345
2410
|
``None``.
|
|
@@ -2364,6 +2429,67 @@ def _latest_smoke_child(board: "Board", parent_id: str) -> "Assignment | None":
|
|
|
2364
2429
|
return max(candidates, key=lambda a: a.dispatched_at or 0.0)
|
|
2365
2430
|
|
|
2366
2431
|
|
|
2432
|
+
def _stamp_fanout_heal_marker(
|
|
2433
|
+
parent_id: str, observed_state: str, child_assignment_id: str,
|
|
2434
|
+
) -> None:
|
|
2435
|
+
"""Append this sweep's #3453 re-heal marker for *child_assignment_id* to a
|
|
2436
|
+
fan-out parent's ``test_reason``, leaving *observed_state* and the rest of
|
|
2437
|
+
the text (crucially the leading ``[[smoke-fanout:...]]`` manifest) intact.
|
|
2438
|
+
|
|
2439
|
+
:func:`coord.smoke.finalize_smoke_fanout` owns the fan-out parent's
|
|
2440
|
+
``test_reason`` and writes its own text (manifest line, headline, per-leg
|
|
2441
|
+
summary) with no knowledge of this module's marker — so the
|
|
2442
|
+
``fanout_finalize`` branch of :func:`sweep_stuck_test_state_rows` cannot
|
|
2443
|
+
embed the marker the way the other three classification branches do
|
|
2444
|
+
(they build the ``failure_reason``/``test_reason`` string themselves).
|
|
2445
|
+
This stamps it on in a second, verdict-preserving write instead, so the
|
|
2446
|
+
:func:`_already_healed_against` guard is as effective for fan-out parents
|
|
2447
|
+
as it is everywhere else.
|
|
2448
|
+
|
|
2449
|
+
Purely a duplicate-heal suppressor: best-effort, never raises, and never
|
|
2450
|
+
changes the verdict. The marker is APPENDED so the manifest stays at
|
|
2451
|
+
position 0 where :func:`coord.smoke._parse_fanout_manifest` (an anchored
|
|
2452
|
+
``match``) still finds it. A ``test_reason`` that reads back as ``None``
|
|
2453
|
+
(absent row, NULL column, or a degraded remote read — indistinguishable
|
|
2454
|
+
through this seam) is left completely alone rather than overwritten with a
|
|
2455
|
+
bare marker: dropping a real aggregate's headline and manifest to win a
|
|
2456
|
+
duplicate-comment guard would be a far worse trade.
|
|
2457
|
+
"""
|
|
2458
|
+
from coord.state import ( # noqa: PLC0415
|
|
2459
|
+
load_assignment_test_reason,
|
|
2460
|
+
record_test_verdict,
|
|
2461
|
+
)
|
|
2462
|
+
|
|
2463
|
+
marker = _stuck_test_state_heal_marker(child_assignment_id)
|
|
2464
|
+
try:
|
|
2465
|
+
reason = load_assignment_test_reason(parent_id)
|
|
2466
|
+
if reason is None:
|
|
2467
|
+
log.warning(
|
|
2468
|
+
"sweep_stuck_test_state_rows: finalized the fan-out verdict "
|
|
2469
|
+
"for %s but could not read its test_reason back to stamp the "
|
|
2470
|
+
"#3453 re-heal marker — leaving the reason untouched",
|
|
2471
|
+
parent_id,
|
|
2472
|
+
)
|
|
2473
|
+
return
|
|
2474
|
+
if marker in reason:
|
|
2475
|
+
return
|
|
2476
|
+
record_test_verdict(
|
|
2477
|
+
assignment_id=parent_id,
|
|
2478
|
+
test_state=observed_state,
|
|
2479
|
+
test_reason=f"{reason}\n{marker}",
|
|
2480
|
+
)
|
|
2481
|
+
except Exception as exc: # noqa: BLE001 — never sink the sweep
|
|
2482
|
+
# The fold itself already landed and was confirmed; failing to stamp
|
|
2483
|
+
# the marker only risks ONE duplicate heal report on a later tick if
|
|
2484
|
+
# something re-stamps `test_state` back to `running`. Never worth
|
|
2485
|
+
# losing the heal we did achieve.
|
|
2486
|
+
log.warning(
|
|
2487
|
+
"sweep_stuck_test_state_rows: could not stamp the #3453 re-heal "
|
|
2488
|
+
"marker on %s (%s) — the fan-out verdict itself stands",
|
|
2489
|
+
parent_id, exc,
|
|
2490
|
+
)
|
|
2491
|
+
|
|
2492
|
+
|
|
2367
2493
|
def sweep_stuck_test_state_rows(
|
|
2368
2494
|
board: "Board",
|
|
2369
2495
|
config: "Config",
|
|
@@ -2390,10 +2516,42 @@ def sweep_stuck_test_state_rows(
|
|
|
2390
2516
|
work, decided by :func:`coord.failure_class.classify_failure` from the
|
|
2391
2517
|
child's own ``failure_reason``), just fleet-wide and automatic instead
|
|
2392
2518
|
of issue-scoped and manual.
|
|
2393
|
-
* **Child reached ``status == "done"
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2519
|
+
* **Child reached ``status == "done"`` with its own recorded verdict**
|
|
2520
|
+
(``test_state`` already ``"passed"``/``"failed"``/``"skipped"``/
|
|
2521
|
+
:data:`coord.smoke.TEST_STATE_BLOCKED` on the CHILD's own row — all four
|
|
2522
|
+
of the terminal verdicts ``finalize_smoke_fanout``'s own severity fold
|
|
2523
|
+
recognizes, ``"blocked"`` very much included: #2272's mute-leg path
|
|
2524
|
+
terminates a leg with exactly ``status="done"``,
|
|
2525
|
+
``test_state="blocked"``) — the write that was lost is the FOLD onto the
|
|
2526
|
+
parent, not the verdict itself (#3453). For a single-leg row, propagate
|
|
2527
|
+
that recorded verdict onto the parent verbatim; never re-classify it as
|
|
2528
|
+
environmental and never spend a #3315 retry-budget tally on it —
|
|
2529
|
+
nothing died, a verdict just never reached the row that gates the
|
|
2530
|
+
merge. **For a #3182 fan-out parent** (its ``test_reason`` carries a
|
|
2531
|
+
``[[smoke-fanout:...]]`` manifest, :func:`coord.smoke._parse_fanout_manifest`)
|
|
2532
|
+
the latest child found here is only ONE capability-partition leg —
|
|
2533
|
+
:func:`_latest_smoke_child` picks it purely by ``dispatched_at``, which
|
|
2534
|
+
says nothing about whether every OTHER leg in the manifest has
|
|
2535
|
+
reported, let alone what any of them said. Propagating that one leg's
|
|
2536
|
+
verdict verbatim would let whichever leg happens to have been
|
|
2537
|
+
dispatched last silently decide the whole row's aggregate, masking a
|
|
2538
|
+
still-running or already-FAILED sibling. This sweep never does that:
|
|
2539
|
+
for a fan-out parent it instead defers to
|
|
2540
|
+
:func:`coord.smoke.finalize_smoke_fanout` — the one place that already
|
|
2541
|
+
folds every named leg with worst-wins severity
|
|
2542
|
+
(``failed`` > ``blocked`` > ``skipped`` > ``passed``) — and only
|
|
2543
|
+
reports (or, live, writes) a heal once every leg in the manifest is
|
|
2544
|
+
itself terminal; while any sibling is still outstanding this is a
|
|
2545
|
+
silent no-op each tick, spending no write and no #3315 tally. It is
|
|
2546
|
+
also a silent no-op when a live re-read shows the parent already
|
|
2547
|
+
carries a terminal verdict (a human's ``coord test`` override, or
|
|
2548
|
+
another process's fold): ``finalize_smoke_fanout`` protects that value,
|
|
2549
|
+
so reporting a heal for it would credit this sweep with a verdict it
|
|
2550
|
+
did not produce.
|
|
2551
|
+
* **Child reached ``status == "done"`` with no verdict of its own
|
|
2552
|
+
either** — genuinely lost: the child itself believes it succeeded but
|
|
2553
|
+
never recorded why. Resolved environmentally: a lost write is a
|
|
2554
|
+
coordinator/infra fault, never a code defect.
|
|
2397
2555
|
* **Child still ``running``/``pending`` itself, or nothing to anchor an
|
|
2398
2556
|
age from** — left alone. A child that is still genuinely executing
|
|
2399
2557
|
(or phantom-dead) is :func:`sweep_dead_running_rows`'s /
|
|
@@ -2408,18 +2566,37 @@ def sweep_stuck_test_state_rows(
|
|
|
2408
2566
|
Test-stage completion has an expected, bounded propagation lag before
|
|
2409
2567
|
its verdict lands on the parent, and that lag is not this bug.
|
|
2410
2568
|
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
``
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2569
|
+
#3453: a ``status == "done"`` child is additionally checked against
|
|
2570
|
+
:func:`_already_healed_against` before anything else — a parent whose
|
|
2571
|
+
current ``test_reason`` already carries the #3453 marker naming THIS
|
|
2572
|
+
exact child is left alone entirely (no write, no tally, not even a
|
|
2573
|
+
dry-run finding), because the row was already resolved once and
|
|
2574
|
+
something (out of this sweep's control) re-stamped ``test_state`` back
|
|
2575
|
+
to ``"running"`` without ever dispatching a fresh child for
|
|
2576
|
+
:func:`_latest_smoke_child` to find instead.
|
|
2577
|
+
|
|
2578
|
+
Recovery for the environmental/work classifications is
|
|
2579
|
+
:func:`coord.reconcile.propagate_smoke_terminal_failure` — the same,
|
|
2580
|
+
already-reviewed seam ``_recover_test`` and ``_reconcile_no_agent_record``
|
|
2581
|
+
both use. It never fabricates a pass/fail verdict: an environmental clear
|
|
2582
|
+
resets ``test_state`` back to ``NULL`` so ``dispatch_pending_smoke``'s
|
|
2583
|
+
ordinary bookkeeping (already run every daemon tick) re-dispatches a
|
|
2584
|
+
fresh Test stage on its own next pass; a work classification records
|
|
2585
|
+
``test_state="failed"`` exactly like a normal non-zero-exit smoke
|
|
2586
|
+
completion would have, spending a bounded ``coord fix`` round exactly as
|
|
2587
|
+
it should have if the write had landed on time. The recorded-verdict case
|
|
2588
|
+
above instead writes straight through ``coord.state.record_test_verdict``
|
|
2589
|
+
with the child's own ``test_state`` — the propagation the lost write
|
|
2590
|
+
should have performed, nothing more. Every write here goes through
|
|
2591
|
+
``coord.state.record_test_verdict`` (directly, or via
|
|
2592
|
+
``propagate_smoke_terminal_failure``'s own use of it) rather than
|
|
2593
|
+
``save_board``, so this function never mutates *board* and the caller
|
|
2594
|
+
does not need to persist it. That propagation is then **confirmed by a
|
|
2595
|
+
re-read** (``coord.state.load_assignment_test_state``) before it is
|
|
2596
|
+
reported as healed (#2096) — a write that raised nothing but left no
|
|
2597
|
+
observable verdict on the parent yields no
|
|
2598
|
+
:class:`StuckTestStateHeal`, because the lost-write class this watchdog
|
|
2599
|
+
exists for (#2802) is exactly the one that raises nothing.
|
|
2423
2600
|
|
|
2424
2601
|
Returns one :class:`StuckTestStateHeal` per row actually healed (or, when
|
|
2425
2602
|
*dry_run*, per row that WOULD be healed). A row whose recovery write
|
|
@@ -2430,6 +2607,7 @@ def sweep_stuck_test_state_rows(
|
|
|
2430
2607
|
tick (or a human via ``coord diagnose --stage test``) to retry.
|
|
2431
2608
|
"""
|
|
2432
2609
|
from coord.models import WORK_LIKE_TYPES # noqa: PLC0415
|
|
2610
|
+
from coord.smoke import TEST_STATE_BLOCKED, _parse_fanout_manifest # noqa: PLC0415
|
|
2433
2611
|
|
|
2434
2612
|
if now is None:
|
|
2435
2613
|
now = time.time()
|
|
@@ -2447,15 +2625,40 @@ def sweep_stuck_test_state_rows(
|
|
|
2447
2625
|
|
|
2448
2626
|
smoke = _latest_smoke_child(board, w.assignment_id)
|
|
2449
2627
|
|
|
2628
|
+
recorded_verdict: str | None = None # #3453: set only when the child's
|
|
2629
|
+
# OWN row already carries a real "passed"/"failed"/"skipped" verdict —
|
|
2630
|
+
# the correct recovery is then to PROPAGATE it, never to discard it.
|
|
2631
|
+
|
|
2632
|
+
fanout_finalize = False # #3453 review: set only when the parent is a
|
|
2633
|
+
# #3182 fan-out round and the latest child's own verdict must defer
|
|
2634
|
+
# to `finalize_smoke_fanout`'s manifest-aware fold instead of being
|
|
2635
|
+
# propagated verbatim (a single leg is never the whole row's answer).
|
|
2636
|
+
|
|
2450
2637
|
if smoke is None:
|
|
2638
|
+
# #3453: mirror the `status=="done"` branch's re-heal guard — a
|
|
2639
|
+
# parent that already carries this marker was resolved once with
|
|
2640
|
+
# no Test-stage child present at all and must not be re-healed
|
|
2641
|
+
# every tick just because something re-stamped `test_state` back
|
|
2642
|
+
# to "running" without ever dispatching a fresh child (the same
|
|
2643
|
+
# quadraui#1077 failure mode is reachable here too).
|
|
2644
|
+
if _already_healed_against(w.test_reason, _NO_SMOKE_CHILD_MARKER_ID):
|
|
2645
|
+
continue
|
|
2451
2646
|
anchor = w.finished_at or w.dispatched_at
|
|
2452
2647
|
cause = "no Test-stage (smoke) assignment exists for this work row at all"
|
|
2453
2648
|
environmental: bool | None = True
|
|
2454
2649
|
failure_reason = (
|
|
2455
2650
|
"watchdog (#2803): test_state='running' with no Test-stage "
|
|
2456
|
-
"assignment found at all"
|
|
2651
|
+
"assignment found at all. "
|
|
2652
|
+
f"{_stuck_test_state_heal_marker(_NO_SMOKE_CHILD_MARKER_ID)}"
|
|
2457
2653
|
)
|
|
2458
2654
|
elif (smoke.status or "") in ("failed", "cancelled"):
|
|
2655
|
+
# #3453: same re-heal guard, keyed on this child. See
|
|
2656
|
+
# `_stuck_test_state_heal_marker`'s docstring for why the marker
|
|
2657
|
+
# is not guaranteed to survive into the written `test_reason`
|
|
2658
|
+
# for the ENVIRONMENTAL sub-classification of this branch (a
|
|
2659
|
+
# `coord.reconcile` seam limitation, not skipped here).
|
|
2660
|
+
if _already_healed_against(w.test_reason, smoke.assignment_id):
|
|
2661
|
+
continue
|
|
2459
2662
|
anchor = smoke.finished_at or smoke.dispatched_at
|
|
2460
2663
|
cause = (
|
|
2461
2664
|
f"Test-stage worker {smoke.assignment_id} already finished "
|
|
@@ -2464,21 +2667,97 @@ def sweep_stuck_test_state_rows(
|
|
|
2464
2667
|
"verdict was never propagated to the parent"
|
|
2465
2668
|
)
|
|
2466
2669
|
environmental = None # classify from failure_reason, like `_recover_test`
|
|
2467
|
-
failure_reason = smoke.failure_reason
|
|
2468
|
-
elif smoke.status == "done":
|
|
2469
|
-
anchor = smoke.finished_at or smoke.dispatched_at
|
|
2470
|
-
cause = (
|
|
2471
|
-
f"Test-stage worker {smoke.assignment_id} finished "
|
|
2472
|
-
"(status='done') but no verdict was ever recorded on the "
|
|
2473
|
-
"parent row"
|
|
2474
|
-
)
|
|
2475
|
-
environmental = True
|
|
2476
2670
|
failure_reason = (
|
|
2477
|
-
f"
|
|
2478
|
-
"
|
|
2479
|
-
"DB-lock class of loss, #2802) — cleared for a fresh "
|
|
2480
|
-
"Test-stage dispatch"
|
|
2671
|
+
f"{smoke.failure_reason or cause}. "
|
|
2672
|
+
f"{_stuck_test_state_heal_marker(smoke.assignment_id)}"
|
|
2481
2673
|
)
|
|
2674
|
+
elif smoke.status == "done":
|
|
2675
|
+
# #3453: never re-heal against the SAME child this sweep already
|
|
2676
|
+
# resolved — see `_stuck_test_state_heal_marker`'s docstring for
|
|
2677
|
+
# the quadraui#1077 incident this guards.
|
|
2678
|
+
if _already_healed_against(w.test_reason, smoke.assignment_id):
|
|
2679
|
+
continue
|
|
2680
|
+
anchor = smoke.finished_at or smoke.dispatched_at
|
|
2681
|
+
# #3453 review: `TEST_STATE_BLOCKED` ("blocked") belongs in this
|
|
2682
|
+
# set too — it is a first-class RECORDED terminal verdict, not an
|
|
2683
|
+
# absent one. `coord.smoke.finalize_smoke_fanout` already treats
|
|
2684
|
+
# it as one in both its severity fold
|
|
2685
|
+
# (`{"failed": 3, TEST_STATE_BLOCKED: 2, "skipped": 1,
|
|
2686
|
+
# "passed": 0}`) and its manifest-merge guard, and
|
|
2687
|
+
# `coord.notify._record_smoke_verdict`'s #2272 mute-leg path
|
|
2688
|
+
# terminates a leg's OWN row with exactly
|
|
2689
|
+
# `status="done", test_state=TEST_STATE_BLOCKED` — a deliberate
|
|
2690
|
+
# "park until a human runs `coord diagnose --stage test --reset`,
|
|
2691
|
+
# never re-dispatch" verdict. Omitting it here sent that row down
|
|
2692
|
+
# the `else` below: classified environmental, cleared back to
|
|
2693
|
+
# NULL, one #3315 tally spent, the specific diagnostic reason
|
|
2694
|
+
# discarded, and a fresh Test dispatch triggered — i.e. the exact
|
|
2695
|
+
# silent-discard defect #3453 exists to fix, reintroduced for one
|
|
2696
|
+
# verdict, plus the precise re-dispatch loop `TEST_STATE_BLOCKED`
|
|
2697
|
+
# was designed to stop. Kept as one set rather than a narrower,
|
|
2698
|
+
# silently-inconsistent copy — the same shape `STAGE_ASSIGNMENT_TYPES["test"]`
|
|
2699
|
+
# above was already bitten by once (#3305).
|
|
2700
|
+
if smoke.test_state in ("passed", "failed", "skipped", TEST_STATE_BLOCKED):
|
|
2701
|
+
fanout_legs = _parse_fanout_manifest(w.test_reason)
|
|
2702
|
+
if fanout_legs:
|
|
2703
|
+
# #3453 review: this parent is a #3182 fan-out round —
|
|
2704
|
+
# the latest smoke CHILD is only ONE partition leg, and
|
|
2705
|
+
# `_latest_smoke_child` picks it purely by
|
|
2706
|
+
# `dispatched_at`, independent of how long any leg's own
|
|
2707
|
+
# suite actually runs. Propagating ITS verdict verbatim
|
|
2708
|
+
# (as the single-leg case below correctly does) would
|
|
2709
|
+
# let whichever leg happens to have the greatest
|
|
2710
|
+
# `dispatched_at` silently decide the whole row's
|
|
2711
|
+
# aggregate — masking a still-running or already-FAILED
|
|
2712
|
+
# sibling partition. Defer entirely to
|
|
2713
|
+
# `coord.smoke.finalize_smoke_fanout`, the one place
|
|
2714
|
+
# that already folds every leg with worst-wins severity
|
|
2715
|
+
# (`failed` > `blocked` > `skipped` > `passed`), and only
|
|
2716
|
+
# once every leg named in the manifest is terminal.
|
|
2717
|
+
fanout_finalize = True
|
|
2718
|
+
environmental = None
|
|
2719
|
+
failure_reason = None
|
|
2720
|
+
cause = (
|
|
2721
|
+
f"Test-stage worker {smoke.assignment_id} (a #3182 "
|
|
2722
|
+
"fan-out leg) finished (status='done') with its own "
|
|
2723
|
+
f"recorded verdict test_state={smoke.test_state!r}, "
|
|
2724
|
+
"but this parent is a fan-out round — deferring to "
|
|
2725
|
+
"finalize_smoke_fanout's manifest-aware aggregation "
|
|
2726
|
+
"across every leg instead of propagating one leg's "
|
|
2727
|
+
"verdict"
|
|
2728
|
+
)
|
|
2729
|
+
else:
|
|
2730
|
+
# Single-leg row — the child's own row already carries a
|
|
2731
|
+
# real verdict — the write that was lost is the FOLD
|
|
2732
|
+
# onto the parent, not the verdict itself. Propagate it
|
|
2733
|
+
# verbatim; this is never an environmental death
|
|
2734
|
+
# (nothing died) and must never spend a #3315
|
|
2735
|
+
# retry-budget tally.
|
|
2736
|
+
recorded_verdict = smoke.test_state
|
|
2737
|
+
environmental = None
|
|
2738
|
+
failure_reason = None
|
|
2739
|
+
cause = (
|
|
2740
|
+
f"Test-stage worker {smoke.assignment_id} finished "
|
|
2741
|
+
f"(status='done') with its own recorded verdict "
|
|
2742
|
+
f"test_state={smoke.test_state!r}, but that verdict "
|
|
2743
|
+
"never landed on the parent row (the #2802 "
|
|
2744
|
+
"lost-write class) — propagating it now instead of "
|
|
2745
|
+
"discarding it for a fresh dispatch"
|
|
2746
|
+
)
|
|
2747
|
+
else:
|
|
2748
|
+
cause = (
|
|
2749
|
+
f"Test-stage worker {smoke.assignment_id} finished "
|
|
2750
|
+
"(status='done') but no verdict was ever recorded on the "
|
|
2751
|
+
"parent row"
|
|
2752
|
+
)
|
|
2753
|
+
environmental = True
|
|
2754
|
+
failure_reason = (
|
|
2755
|
+
f"watchdog (#2803): Test-stage worker {smoke.assignment_id} "
|
|
2756
|
+
"finished but the parent verdict write never landed (the "
|
|
2757
|
+
"DB-lock class of loss, #2802) — cleared for a fresh "
|
|
2758
|
+
"Test-stage dispatch. "
|
|
2759
|
+
f"{_stuck_test_state_heal_marker(smoke.assignment_id)}"
|
|
2760
|
+
)
|
|
2482
2761
|
else:
|
|
2483
2762
|
continue # still running/pending — not this sweep's job
|
|
2484
2763
|
|
|
@@ -2494,6 +2773,223 @@ def sweep_stuck_test_state_rows(
|
|
|
2494
2773
|
"window)"
|
|
2495
2774
|
)
|
|
2496
2775
|
|
|
2776
|
+
if fanout_finalize:
|
|
2777
|
+
# #3453 review: never write a single leg's verdict onto a
|
|
2778
|
+
# fan-out parent. Peek at every leg named in the manifest
|
|
2779
|
+
# read-only first — this is the only way to know whether
|
|
2780
|
+
# `finalize_smoke_fanout` would actually fold anything right
|
|
2781
|
+
# now (it silently no-ops until every leg is terminal), so a
|
|
2782
|
+
# dry-run can report accurately and a live run spends no tally
|
|
2783
|
+
# and no write while siblings are still outstanding.
|
|
2784
|
+
from coord.state import load_assignment_test_state # noqa: PLC0415
|
|
2785
|
+
|
|
2786
|
+
manifest_legs = _parse_fanout_manifest(w.test_reason) or []
|
|
2787
|
+
try:
|
|
2788
|
+
# #3453 review: read the parent's LIVE `test_state` too, not
|
|
2789
|
+
# just the legs'. *board* is a snapshot; between it being
|
|
2790
|
+
# loaded and this sweep running, the parent may already have
|
|
2791
|
+
# been resolved out of band (a human's `coord test` override,
|
|
2792
|
+
# or a `finalize_smoke_fanout` fold from another process).
|
|
2793
|
+
# `finalize_smoke_fanout` is documented to NO-OP against an
|
|
2794
|
+
# already-terminal parent precisely to protect that override —
|
|
2795
|
+
# so without this pre-read, the post-call re-read below would
|
|
2796
|
+
# see that pre-existing verdict, conclude "terminal, therefore
|
|
2797
|
+
# I finalized it", and post an "auto-healed ... finalized the
|
|
2798
|
+
# fan-out aggregate verdict (X)" comment for a verdict this
|
|
2799
|
+
# sweep did not produce. The value itself is never clobbered
|
|
2800
|
+
# (the no-op protects it), so this is misattribution rather
|
|
2801
|
+
# than corruption — but a gate that cannot tell its own write
|
|
2802
|
+
# from someone else's is not a gate (#2096).
|
|
2803
|
+
parent_live = load_assignment_test_state(w.assignment_id)
|
|
2804
|
+
leg_states = [
|
|
2805
|
+
load_assignment_test_state(leg_id) for leg_id, _caps, _cmd in manifest_legs
|
|
2806
|
+
]
|
|
2807
|
+
except Exception as exc: # noqa: BLE001 — never sink the sweep
|
|
2808
|
+
log.warning(
|
|
2809
|
+
"sweep_stuck_test_state_rows: could not read the fan-out "
|
|
2810
|
+
"leg/parent verdicts for %s (%s) — leaving it for the "
|
|
2811
|
+
"next tick",
|
|
2812
|
+
w.assignment_id, exc,
|
|
2813
|
+
)
|
|
2814
|
+
continue
|
|
2815
|
+
|
|
2816
|
+
if parent_live not in (None, "running"):
|
|
2817
|
+
# Already resolved out of band — nothing wedged any more.
|
|
2818
|
+
# Not a heal (this sweep did nothing), so no write, no tally
|
|
2819
|
+
# and no comment, in dry-run and live alike.
|
|
2820
|
+
continue
|
|
2821
|
+
|
|
2822
|
+
ready = bool(manifest_legs) and all(
|
|
2823
|
+
s not in (None, "running") for s in leg_states
|
|
2824
|
+
)
|
|
2825
|
+
if not ready:
|
|
2826
|
+
# A sibling leg hasn't reported in yet — nothing to fold.
|
|
2827
|
+
# No write, no tally; try again next tick once it lands.
|
|
2828
|
+
continue
|
|
2829
|
+
|
|
2830
|
+
if dry_run:
|
|
2831
|
+
healed.append(StuckTestStateHeal(
|
|
2832
|
+
assignment_id=w.assignment_id,
|
|
2833
|
+
machine_name=w.machine_name or "unknown",
|
|
2834
|
+
repo_name=w.repo_name,
|
|
2835
|
+
issue_number=w.issue_number,
|
|
2836
|
+
detail=detail,
|
|
2837
|
+
action=(
|
|
2838
|
+
"(dry-run) would defer to finalize_smoke_fanout to "
|
|
2839
|
+
"fold every leg's own verdict into the parent's "
|
|
2840
|
+
"aggregate (#3453)"
|
|
2841
|
+
),
|
|
2842
|
+
))
|
|
2843
|
+
continue
|
|
2844
|
+
|
|
2845
|
+
from coord.smoke import finalize_smoke_fanout # noqa: PLC0415
|
|
2846
|
+
|
|
2847
|
+
# `finalize_smoke_fanout` never raises (documented, catches and
|
|
2848
|
+
# logs internally) — no try/except needed around the call
|
|
2849
|
+
# itself, unlike `record_test_verdict` below.
|
|
2850
|
+
finalize_smoke_fanout(w.assignment_id)
|
|
2851
|
+
|
|
2852
|
+
# #2096: same confirm-by-re-read discipline as the single-leg
|
|
2853
|
+
# path — a lost write here is exactly the #2802 class this
|
|
2854
|
+
# whole sweep exists to catch, so report a heal only once the
|
|
2855
|
+
# aggregate is actually observable as terminal on the parent.
|
|
2856
|
+
try:
|
|
2857
|
+
observed = load_assignment_test_state(w.assignment_id)
|
|
2858
|
+
except Exception as exc: # noqa: BLE001 — never sink the sweep
|
|
2859
|
+
log.warning(
|
|
2860
|
+
"sweep_stuck_test_state_rows: could not confirm the "
|
|
2861
|
+
"finalized fan-out verdict for %s (%s) — not reporting "
|
|
2862
|
+
"a heal",
|
|
2863
|
+
w.assignment_id, exc,
|
|
2864
|
+
)
|
|
2865
|
+
continue
|
|
2866
|
+
if observed in (None, "running"):
|
|
2867
|
+
# `finalize_smoke_fanout` no-op'd — e.g. a sibling leg's own
|
|
2868
|
+
# verdict changed between our readiness peek above and the
|
|
2869
|
+
# call (or the manifest was consumed/rewritten concurrently).
|
|
2870
|
+
# Not healed yet; the next tick will re-check readiness.
|
|
2871
|
+
continue
|
|
2872
|
+
|
|
2873
|
+
# #3453 review: `finalize_smoke_fanout` writes its own
|
|
2874
|
+
# `test_reason` (manifest line + headline + per-leg summary) and
|
|
2875
|
+
# knows nothing about this sweep's re-heal marker, so stamp it on
|
|
2876
|
+
# afterwards — otherwise this branch alone lacks the guard the
|
|
2877
|
+
# other three classifications now share, and a parent re-stamped
|
|
2878
|
+
# to `running` without a fresh leg would re-enter here and
|
|
2879
|
+
# re-report a duplicate heal (hence a duplicate "auto-healed"
|
|
2880
|
+
# GitHub comment) every tick, the quadraui#1077 shape.
|
|
2881
|
+
_stamp_fanout_heal_marker(w.assignment_id, observed, smoke.assignment_id)
|
|
2882
|
+
|
|
2883
|
+
healed.append(StuckTestStateHeal(
|
|
2884
|
+
assignment_id=w.assignment_id,
|
|
2885
|
+
machine_name=w.machine_name or "unknown",
|
|
2886
|
+
repo_name=w.repo_name,
|
|
2887
|
+
issue_number=w.issue_number,
|
|
2888
|
+
detail=detail,
|
|
2889
|
+
action=(
|
|
2890
|
+
f"finalized the fan-out aggregate verdict "
|
|
2891
|
+
f"({observed!r}) for the parent from every leg's own "
|
|
2892
|
+
"recorded verdict (#3453)"
|
|
2893
|
+
),
|
|
2894
|
+
))
|
|
2895
|
+
continue
|
|
2896
|
+
|
|
2897
|
+
if recorded_verdict is not None:
|
|
2898
|
+
# #3453: propagate the child's own already-recorded verdict —
|
|
2899
|
+
# never `propagate_smoke_terminal_failure` (that always
|
|
2900
|
+
# classifies environmental-vs-work and, for the environmental
|
|
2901
|
+
# branch, always spends a #3315 tally; neither applies here,
|
|
2902
|
+
# since nothing died and this is not a fresh Test-stage death).
|
|
2903
|
+
if dry_run:
|
|
2904
|
+
healed.append(StuckTestStateHeal(
|
|
2905
|
+
assignment_id=w.assignment_id,
|
|
2906
|
+
machine_name=w.machine_name or "unknown",
|
|
2907
|
+
repo_name=w.repo_name,
|
|
2908
|
+
issue_number=w.issue_number,
|
|
2909
|
+
detail=detail,
|
|
2910
|
+
action=(
|
|
2911
|
+
"(dry-run) would propagate the Test-stage child's "
|
|
2912
|
+
"recorded verdict to the parent (#3453)"
|
|
2913
|
+
),
|
|
2914
|
+
))
|
|
2915
|
+
continue
|
|
2916
|
+
|
|
2917
|
+
from coord.state import ( # noqa: PLC0415
|
|
2918
|
+
load_assignment_test_state,
|
|
2919
|
+
record_test_verdict,
|
|
2920
|
+
)
|
|
2921
|
+
|
|
2922
|
+
propagated_reason = (
|
|
2923
|
+
f"{cause}. {_stuck_test_state_heal_marker(smoke.assignment_id)}"
|
|
2924
|
+
)
|
|
2925
|
+
try:
|
|
2926
|
+
record_test_verdict(
|
|
2927
|
+
assignment_id=w.assignment_id,
|
|
2928
|
+
test_state=recorded_verdict,
|
|
2929
|
+
test_reason=propagated_reason,
|
|
2930
|
+
)
|
|
2931
|
+
except Exception as exc: # noqa: BLE001 — never sink the sweep
|
|
2932
|
+
log.warning(
|
|
2933
|
+
"sweep_stuck_test_state_rows: recovery write failed for "
|
|
2934
|
+
"%s (%s) — leaving test_state='running' for the next "
|
|
2935
|
+
"tick",
|
|
2936
|
+
w.assignment_id, exc,
|
|
2937
|
+
)
|
|
2938
|
+
continue
|
|
2939
|
+
|
|
2940
|
+
# #2096: a returning `record_test_verdict` proves the write was
|
|
2941
|
+
# ISSUED, not that it LANDED — and the whole reason this row is
|
|
2942
|
+
# here is that a Test verdict write silently vanished once
|
|
2943
|
+
# already (#2802: DB-lock contention, a daemon that accepted the
|
|
2944
|
+
# POST and died before committing, a degraded remote write that
|
|
2945
|
+
# fell back to a local DB nothing else reads). Re-read the parent
|
|
2946
|
+
# row and only report a heal when the propagated verdict is
|
|
2947
|
+
# actually observable on it. `load_assignment_test_state` is the
|
|
2948
|
+
# same single-row reader `coord notify`'s smoke reap uses to ask
|
|
2949
|
+
# this exact question (#2244) — one question, one answer — and it
|
|
2950
|
+
# returns `None` for "absent row / NULL / degraded read", all of
|
|
2951
|
+
# which mean "I cannot see the verdict", so this confirmation
|
|
2952
|
+
# fails CLOSED: no `StuckTestStateHeal`, hence no "auto-healed"
|
|
2953
|
+
# GitHub comment claiming a propagation nobody can observe. The
|
|
2954
|
+
# repair itself still stands if it did land, and the #3453 marker
|
|
2955
|
+
# in `test_reason` still suppresses a duplicate attempt next tick.
|
|
2956
|
+
#
|
|
2957
|
+
# The environmental branch below deliberately has no equivalent
|
|
2958
|
+
# check: its recovery writes `test_state=NULL`, which this reader
|
|
2959
|
+
# cannot distinguish from "row absent" or "read failed", so a
|
|
2960
|
+
# re-read there could only produce a verdict that is always
|
|
2961
|
+
# ambiguous — never a gate that can genuinely fail.
|
|
2962
|
+
try:
|
|
2963
|
+
observed = load_assignment_test_state(w.assignment_id)
|
|
2964
|
+
except Exception as exc: # noqa: BLE001 — never sink the sweep
|
|
2965
|
+
log.warning(
|
|
2966
|
+
"sweep_stuck_test_state_rows: could not confirm the "
|
|
2967
|
+
"propagated verdict for %s (%s) — not reporting a heal",
|
|
2968
|
+
w.assignment_id, exc,
|
|
2969
|
+
)
|
|
2970
|
+
continue
|
|
2971
|
+
if observed != recorded_verdict:
|
|
2972
|
+
log.warning(
|
|
2973
|
+
"sweep_stuck_test_state_rows: propagated "
|
|
2974
|
+
"test_state=%r to %s but a re-read shows %r — the write "
|
|
2975
|
+
"did not land; not reporting a heal",
|
|
2976
|
+
recorded_verdict, w.assignment_id, observed,
|
|
2977
|
+
)
|
|
2978
|
+
continue
|
|
2979
|
+
|
|
2980
|
+
healed.append(StuckTestStateHeal(
|
|
2981
|
+
assignment_id=w.assignment_id,
|
|
2982
|
+
machine_name=w.machine_name or "unknown",
|
|
2983
|
+
repo_name=w.repo_name,
|
|
2984
|
+
issue_number=w.issue_number,
|
|
2985
|
+
detail=detail,
|
|
2986
|
+
action=(
|
|
2987
|
+
"propagated the Test-stage child's recorded verdict to "
|
|
2988
|
+
"the parent (#3453)"
|
|
2989
|
+
),
|
|
2990
|
+
))
|
|
2991
|
+
continue
|
|
2992
|
+
|
|
2497
2993
|
if dry_run:
|
|
2498
2994
|
healed.append(StuckTestStateHeal(
|
|
2499
2995
|
assignment_id=w.assignment_id,
|