code-coordinator 0.5.648__tar.gz → 0.5.649__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.648 → code_coordinator-0.5.649}/PKG-INFO +1 -1
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/drive_queue.py +199 -1
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_drive_queue.py +267 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/.gitignore +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/CLAUDE.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/GOAL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/LICENSE +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/MANIFEST.in +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/README.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/__init__.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/agent.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/app_drive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/app_drive_daemon.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/audit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/backup.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/block_log.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/board_service.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/brain.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/briefing_lessons.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/claim.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/cli.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/client.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/codegen.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/app_drive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/smoke.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/comments.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/config.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dao.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/db.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/deps.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/drive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/events.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/filelock.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/freshness.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/gates.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/goal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/gui_lane_preflight.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/context.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/models.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/render.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/health/units.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/hooks.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/interactive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/key_spec.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/models.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/native_fs_wait.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/native_pixels.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/network.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/nightly_runner.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/nightly_smoke.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/nightly_status.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/nightly_store.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/notify.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/openapi.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/parentage.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/plans.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/prereview_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/progress.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/release_window.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/reports.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/review.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/self_health.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/shell_exec_wrap.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/smoke.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/split_work.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/sql.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/state.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/test_author.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/test_report.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/upstream_gaps.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/usage.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-nightly-smoke.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-nightly-smoke.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/install-agent.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/pyproject.toml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/comment_cruft.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/setup.cfg +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/__init__.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/backends.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/conftest.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_graph_refresh.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_app_drive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_board_nightly_status.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_briefing_lessons.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_inject_board_less.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_issue_close_wrong_repo.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_smoke_nightly.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_smoke_nightly_sweep.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_nightly.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_client.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_comment_cruft.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_config.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_config_prereview_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_db.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_events.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_init.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_key_spec.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_merge_verification.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_models.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_models_pinned_1650.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_native_fs_wait.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_native_pixels.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_network.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_nightly_runner.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_nightly_smoke.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_nightly_status.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_nightly_store.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_no_eligible_host_3600.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_plain_runner_smoke_3673.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_prereview_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_review.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_session.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_smoke_plain_runner_3673.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_split.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_state.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_upstream_gaps.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.648 → code_coordinator-0.5.649}/tests/write_parity.py +0 -0
|
@@ -31,6 +31,7 @@ from __future__ import annotations
|
|
|
31
31
|
|
|
32
32
|
import json as _json
|
|
33
33
|
import logging
|
|
34
|
+
import re
|
|
34
35
|
import socket
|
|
35
36
|
import subprocess
|
|
36
37
|
import time
|
|
@@ -95,7 +96,9 @@ from coord.drive_queue import (
|
|
|
95
96
|
is_fix_round_ceiling_blocked,
|
|
96
97
|
is_merge_gate_block_reason,
|
|
97
98
|
is_permanent_block_reason,
|
|
99
|
+
is_policy_refusal_reason,
|
|
98
100
|
is_pre_dispatch_block_reason,
|
|
101
|
+
is_premise_refusal_reason,
|
|
99
102
|
is_test_stage_routing_dead_end_reason,
|
|
100
103
|
is_unsatisfiable_prereq_reason,
|
|
101
104
|
merge_gate_remedy_command,
|
|
@@ -2304,6 +2307,36 @@ def drive_queue_remove(repo: str, issue: int, config_path: Path) -> None:
|
|
|
2304
2307
|
)
|
|
2305
2308
|
|
|
2306
2309
|
|
|
2310
|
+
#: Shapes an un-filled-in ``--reason`` template takes: an angle-bracketed
|
|
2311
|
+
#: prompt (``<describe why the premise now holds>``) or a bare ellipsis
|
|
2312
|
+
#: (``"..."``) — the two forms this repo's own remediation strings use.
|
|
2313
|
+
_TEMPLATED_REASON_RE = re.compile(r"<[^<>]*>|^[.…\s]+$")
|
|
2314
|
+
|
|
2315
|
+
|
|
2316
|
+
def _is_templated_reason(reason: str) -> bool:
|
|
2317
|
+
"""True when *reason* is still a copy-pasted placeholder, not an assertion.
|
|
2318
|
+
|
|
2319
|
+
#3339's premise recheck is "a human's explicit, auditable assertion …
|
|
2320
|
+
its mere presence — never inferred, never re-derived" (`coord/drive.py`'s
|
|
2321
|
+
`decide()`), so the one thing `--reason` must never accept is the template
|
|
2322
|
+
text out of a remediation string. Several surfaces print that chain with a
|
|
2323
|
+
placeholder in it — `coord diagnose`'s `refused_premise` finding, the
|
|
2324
|
+
premise park reason, and the `proposed_command` on the #3719 refusal-park
|
|
2325
|
+
escalation, which `coord escalate run` executes blind with no confirmation
|
|
2326
|
+
prompt. Rejecting the placeholder is what makes such a blind run exit
|
|
2327
|
+
non-zero (so nothing is requeued and the escalation is not dismissed)
|
|
2328
|
+
instead of recording a fabricated assertion and dispatching paid work at
|
|
2329
|
+
a premise nobody rechecked.
|
|
2330
|
+
|
|
2331
|
+
The angle-bracket arm over-matches: a genuine reason that quotes a
|
|
2332
|
+
bracketed URL (`PR <https://…> landed`) is rejected too. That is the
|
|
2333
|
+
deliberate direction to err in — the rejection names the offending
|
|
2334
|
+
string and shows a usable example, so the cost is one retyped sentence,
|
|
2335
|
+
whereas the other direction records an assertion nobody made.
|
|
2336
|
+
"""
|
|
2337
|
+
return bool(_TEMPLATED_REASON_RE.search(reason))
|
|
2338
|
+
|
|
2339
|
+
|
|
2307
2340
|
@drive_queue_group.command("clear-refusal")
|
|
2308
2341
|
@click.argument("repo")
|
|
2309
2342
|
@click.argument("issue", type=int)
|
|
@@ -2336,6 +2369,13 @@ def drive_queue_clear_refusal(
|
|
|
2336
2369
|
row that will actually tick. Re-scope the issue FIRST if the remaining
|
|
2337
2370
|
work has changed — this command only unblocks dispatch, it does not
|
|
2338
2371
|
touch the issue body.
|
|
2372
|
+
|
|
2373
|
+
`--reason` must be your own words. A still-templated placeholder — the
|
|
2374
|
+
`<...>`/`"..."` text the remediation chains printed by `coord diagnose`,
|
|
2375
|
+
the premise park reason and the #3719 refusal-park escalation all carry
|
|
2376
|
+
— is rejected, so running one of those chains verbatim (including blind,
|
|
2377
|
+
via `coord escalate run`) fails here rather than fabricating the
|
|
2378
|
+
assertion and redispatching paid work at an unverified premise.
|
|
2339
2379
|
"""
|
|
2340
2380
|
from coord.drive_state import WORK_LIKE # noqa: PLC0415
|
|
2341
2381
|
from coord.state import mark_premise_rechecked # noqa: PLC0415
|
|
@@ -2343,6 +2383,16 @@ def drive_queue_clear_refusal(
|
|
|
2343
2383
|
reason = reason.strip()
|
|
2344
2384
|
if not reason:
|
|
2345
2385
|
raise click.ClickException("--reason must not be empty")
|
|
2386
|
+
if _is_templated_reason(reason):
|
|
2387
|
+
raise click.ClickException(
|
|
2388
|
+
f"--reason is still the placeholder text ({reason!r}) — it must be "
|
|
2389
|
+
"your own assertion of why the premise now holds (e.g. "
|
|
2390
|
+
'--reason "quadraui#971 landed, re-scoped to a pin move"). This '
|
|
2391
|
+
"is recorded as a human's explicit, auditable claim that the "
|
|
2392
|
+
"prerequisite exists now, and `coord drive` dispatches fresh "
|
|
2393
|
+
"paid work off its mere presence, so it is never inferred and "
|
|
2394
|
+
"never filled in from a template."
|
|
2395
|
+
)
|
|
2346
2396
|
|
|
2347
2397
|
aid, status, _machine = _latest_work_assignment(repo, issue)
|
|
2348
2398
|
if not aid:
|
|
@@ -6759,7 +6809,15 @@ def _apply_writes(plan: TickPlan) -> None:
|
|
|
6759
6809
|
update_drive_queue_entry(parsed[0], parsed[1], **updates)
|
|
6760
6810
|
|
|
6761
6811
|
|
|
6762
|
-
def _escalate(
|
|
6812
|
+
def _escalate(
|
|
6813
|
+
repo: str,
|
|
6814
|
+
issue: int,
|
|
6815
|
+
*,
|
|
6816
|
+
reason: str,
|
|
6817
|
+
gates: str,
|
|
6818
|
+
command: str,
|
|
6819
|
+
assignment_id: str | None = None,
|
|
6820
|
+
) -> None:
|
|
6763
6821
|
from coord.state import record_drive_escalation # noqa: PLC0415
|
|
6764
6822
|
|
|
6765
6823
|
record_drive_escalation(
|
|
@@ -6769,6 +6827,7 @@ def _escalate(repo: str, issue: int, *, reason: str, gates: str, command: str) -
|
|
|
6769
6827
|
reason=reason,
|
|
6770
6828
|
gate_readings=gates,
|
|
6771
6829
|
proposed_command=command,
|
|
6830
|
+
assignment_id=assignment_id,
|
|
6772
6831
|
)
|
|
6773
6832
|
|
|
6774
6833
|
|
|
@@ -6801,6 +6860,77 @@ def _requeue_command(entry: QueueEntry | None, key: str) -> str:
|
|
|
6801
6860
|
)
|
|
6802
6861
|
|
|
6803
6862
|
|
|
6863
|
+
def _refusal_park_escalation_command(
|
|
6864
|
+
entry: QueueEntry | None,
|
|
6865
|
+
key: str,
|
|
6866
|
+
reason: str,
|
|
6867
|
+
kind: str,
|
|
6868
|
+
*,
|
|
6869
|
+
config_path: Path | None = None,
|
|
6870
|
+
) -> str:
|
|
6871
|
+
"""The command a #3719 policy-/premise-refusal `parked` escalation
|
|
6872
|
+
proposes.
|
|
6873
|
+
|
|
6874
|
+
Both causes need a human DECISION first — retarget the issue (policy,
|
|
6875
|
+
#2234) or confirm the premise now holds (premise, #3164) — and neither
|
|
6876
|
+
decision is itself expressible as a blind CLI command: retargeting means
|
|
6877
|
+
rewriting the GitHub issue title by hand, and `clear-refusal` takes a
|
|
6878
|
+
free-text `--reason` only a human can write. `reason` (passed through
|
|
6879
|
+
verbatim as this escalation's own `reason=`) already states which
|
|
6880
|
+
decision is needed and why, so this only has to supply the mechanical
|
|
6881
|
+
half that runs once that decision is made.
|
|
6882
|
+
|
|
6883
|
+
A parked `refused_premise`/`refused_policy` row IS a completed
|
|
6884
|
+
Work-stage assignment (that is what those statuses mean), so it gets
|
|
6885
|
+
the mechanical half from `_blocked_escalation_command` — the same
|
|
6886
|
+
function every other parked/blocked escalation uses — instead of a
|
|
6887
|
+
bespoke requeue: #2377's open-PR check (never propose a blind requeue
|
|
6888
|
+
when an out-of-band PR already exists for this entry) and #3539's
|
|
6889
|
+
plain-`add` carve-out (a green PR missing only its recorded gates)
|
|
6890
|
+
both apply here as they do for any other parked entry. One corner is
|
|
6891
|
+
inherited from #3539's own design rather than chosen here: it reasons
|
|
6892
|
+
from `state.work_aid` being unset, which for a refusal park it is not,
|
|
6893
|
+
so on a premise refusal whose issue has acquired a green out-of-band PR
|
|
6894
|
+
the plain `add` restarts the Work stage over that PR rather than
|
|
6895
|
+
running only the missing stages forward.
|
|
6896
|
+
|
|
6897
|
+
For `kind == "premise"`, `coord drive`'s `decide()` reads the latest
|
|
6898
|
+
work assignment's own `work_status` column directly — independent of
|
|
6899
|
+
the drive-queue row or any PR — so ANY redispatch (the blind requeue
|
|
6900
|
+
OR the #3539 plain `add`) dies on the same refusal again unless
|
|
6901
|
+
`clear-refusal` first records that the premise now holds. Prepend
|
|
6902
|
+
that step whenever the delegated command would actually redispatch
|
|
6903
|
+
(still names `drive-queue add`); the inspect/merge-existing remedies
|
|
6904
|
+
propose no redispatch at all, so they need no such prefix. The policy
|
|
6905
|
+
case has no `clear-refusal` equivalent — #2234's refusal is cleared by
|
|
6906
|
+
retargeting the GitHub issue by hand, which a redispatch neither needs
|
|
6907
|
+
nor can bypass.
|
|
6908
|
+
|
|
6909
|
+
The `--reason` this emits is a PLACEHOLDER, and this field is executed
|
|
6910
|
+
blind: `coord escalate run` shells the whole string out with no
|
|
6911
|
+
confirmation prompt, and `coord/reports.py` offers it as the card's
|
|
6912
|
+
"Recommended" option. That is safe only because
|
|
6913
|
+
:func:`_is_templated_reason` makes `clear-refusal` reject the
|
|
6914
|
+
placeholder, so a one-key run fails on the FIRST step — nothing is
|
|
6915
|
+
requeued, no premise assertion is recorded, and `escalate run` reports
|
|
6916
|
+
the failure instead of dismissing the escalation as resolved. Keep the
|
|
6917
|
+
two in step: an edit here that produces a reason `clear-refusal` would
|
|
6918
|
+
accept turns this into a blind command that fabricates the one value
|
|
6919
|
+
#3339 says must never be inferred.
|
|
6920
|
+
"""
|
|
6921
|
+
tail = _blocked_escalation_command(entry, key, reason, config_path=config_path)
|
|
6922
|
+
if kind != "premise" or "drive-queue add" not in tail:
|
|
6923
|
+
return tail
|
|
6924
|
+
parsed = parse_key(key)
|
|
6925
|
+
if parsed is None:
|
|
6926
|
+
return tail
|
|
6927
|
+
repo, issue = parsed
|
|
6928
|
+
return (
|
|
6929
|
+
f"coord drive-queue clear-refusal {repo} {issue} "
|
|
6930
|
+
f'--reason "<describe why the premise now holds>" && {tail}'
|
|
6931
|
+
)
|
|
6932
|
+
|
|
6933
|
+
|
|
6804
6934
|
def _blocked_escalation_command(
|
|
6805
6935
|
entry: QueueEntry | None,
|
|
6806
6936
|
key: str,
|
|
@@ -7771,6 +7901,74 @@ def drive_queue_tick(
|
|
|
7771
7901
|
command=merge_plan_inspect_command(parsed[0]),
|
|
7772
7902
|
)
|
|
7773
7903
|
|
|
7904
|
+
# #3719: a `parked` entry whose park reason names a policy (#2234)
|
|
7905
|
+
# or premise (#3164) refusal never resumes on its own — see
|
|
7906
|
+
# `plan_tick`'s pre-pass above (`is_policy_refusal_reason`/
|
|
7907
|
+
# `is_premise_refusal_reason` both just `continue`, leaving the
|
|
7908
|
+
# entry parked rather than falling through to the CI-park auto-
|
|
7909
|
+
# resume) — so without this it sits invisible until an operator
|
|
7910
|
+
# happens to notice it in `coord drive-queue list`. Gate-A
|
|
7911
|
+
# (#2063), throttle-skip (#2977), `merge_ci_pending` (#1891), and
|
|
7912
|
+
# the issue-cache-stale (#2858) parks are deliberately NOT swept
|
|
7913
|
+
# here: all four are documented, by the same pre-pass, to clear
|
|
7914
|
+
# themselves with no human decision needed — exactly the
|
|
7915
|
+
# auto-resolvable half #3719 says must NOT be escalated.
|
|
7916
|
+
#
|
|
7917
|
+
# This fires once: `plan.reconciles` only carries a `"parked"`
|
|
7918
|
+
# entry for *this* key on the single tick `_reconcile_running`
|
|
7919
|
+
# first parks it (a running entry hitting the refusal) — every
|
|
7920
|
+
# later tick the entry stays parked, the pre-pass above `continue`s
|
|
7921
|
+
# without emitting a `Reconcile` for it at all, so there is no
|
|
7922
|
+
# repeat entry here to re-escalate on.
|
|
7923
|
+
for item in plan.reconciles:
|
|
7924
|
+
if item.outcome != "parked":
|
|
7925
|
+
continue
|
|
7926
|
+
if not (
|
|
7927
|
+
is_policy_refusal_reason(item.reason)
|
|
7928
|
+
or is_premise_refusal_reason(item.reason)
|
|
7929
|
+
):
|
|
7930
|
+
continue
|
|
7931
|
+
parsed = parse_key(item.key)
|
|
7932
|
+
if parsed is None:
|
|
7933
|
+
continue
|
|
7934
|
+
entry = by_key.get(item.key)
|
|
7935
|
+
kind = "premise" if is_premise_refusal_reason(item.reason) else "policy"
|
|
7936
|
+
# Best-effort, matching `_record_checks_stale_escalation`'s own
|
|
7937
|
+
# posture: the write above (`_apply_writes(plan)`) already
|
|
7938
|
+
# landed, so a failure recording the escalation itself must not
|
|
7939
|
+
# turn an otherwise-successful tick into a reported CLI failure.
|
|
7940
|
+
# The stdout line is the floor, and here it is load-bearing: the
|
|
7941
|
+
# sweep fires once per park, so a failure anywhere in this block
|
|
7942
|
+
# (including inside `_refusal_park_escalation_command`, which
|
|
7943
|
+
# reaches `gh` for #2377's open-PR check) loses this entry's ONLY
|
|
7944
|
+
# escalation permanently — it must at least leave a trace.
|
|
7945
|
+
try:
|
|
7946
|
+
aid, _status, _machine = _latest_work_assignment(
|
|
7947
|
+
parsed[0], parsed[1]
|
|
7948
|
+
)
|
|
7949
|
+
_escalate(
|
|
7950
|
+
parsed[0],
|
|
7951
|
+
parsed[1],
|
|
7952
|
+
reason=item.reason,
|
|
7953
|
+
gates=(
|
|
7954
|
+
f"queue_state=parked | refusal={kind} | position="
|
|
7955
|
+
f"{entry.position if entry else '?'}"
|
|
7956
|
+
),
|
|
7957
|
+
command=_refusal_park_escalation_command(
|
|
7958
|
+
entry,
|
|
7959
|
+
item.key,
|
|
7960
|
+
item.reason,
|
|
7961
|
+
kind,
|
|
7962
|
+
config_path=config_path,
|
|
7963
|
+
),
|
|
7964
|
+
assignment_id=aid or None,
|
|
7965
|
+
)
|
|
7966
|
+
except Exception as exc: # noqa: BLE001 — the stdout line is the floor
|
|
7967
|
+
click.echo(
|
|
7968
|
+
f" (could not record the {kind}-refusal park escalation "
|
|
7969
|
+
f"for {item.key}: {exc})"
|
|
7970
|
+
)
|
|
7971
|
+
|
|
7774
7972
|
# #3695 review finding 1: `_apply_writes(plan)` above only ever
|
|
7775
7973
|
# touches `_DRIVE_QUEUE_UPDATABLE` columns on the DRIVE QUEUE row
|
|
7776
7974
|
# itself (`update_drive_queue_entry`) — it has no way to reach the
|
|
@@ -1093,6 +1093,98 @@ def test_blocked_escalation_command_proposes_a_plain_add_when_pr_is_green_but_un
|
|
|
1093
1093
|
assert "remove" not in command
|
|
1094
1094
|
|
|
1095
1095
|
|
|
1096
|
+
# ── #3719: what a refusal park's escalation proposes ────────────────────────
|
|
1097
|
+
#
|
|
1098
|
+
# `_refusal_park_escalation_command` delegates the mechanical half to
|
|
1099
|
+
# `_blocked_escalation_command` (so #2377's open-PR check and #3539's
|
|
1100
|
+
# plain-`add` carve-out apply) and prepends `clear-refusal` ONLY when the
|
|
1101
|
+
# delegated tail would actually redispatch AND the refusal is a premise one.
|
|
1102
|
+
# That branch selector is a substring sniff on the tail, so both of its
|
|
1103
|
+
# negative legs are pinned here: a wording change in
|
|
1104
|
+
# `existing_pr_relaunch_remedy`/`merge_gate_remedy_command` that silently
|
|
1105
|
+
# flipped either direction would otherwise leave the suite green.
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
def test_refusal_park_command_prepends_clear_refusal_for_a_premise_requeue(
|
|
1109
|
+
monkeypatch, config_file,
|
|
1110
|
+
):
|
|
1111
|
+
"""The positive leg: premise refusal, nothing dispatched out of band, so
|
|
1112
|
+
the tail is the blind requeue — `coord drive`'s `decide()` reads the
|
|
1113
|
+
latest work row's own status, so the requeue must be preceded by the
|
|
1114
|
+
`clear-refusal` that records the premise holds now (#3339)."""
|
|
1115
|
+
from coord.commands.drive_queue import _refusal_park_escalation_command
|
|
1116
|
+
from coord.drive_queue import entry_key
|
|
1117
|
+
|
|
1118
|
+
monkeypatch.setattr(
|
|
1119
|
+
"coord.commands.drive_queue._existing_pr_match",
|
|
1120
|
+
lambda config_path, repo, issue: None,
|
|
1121
|
+
)
|
|
1122
|
+
command = _refusal_park_escalation_command(
|
|
1123
|
+
None, entry_key(REPO, 4219), "refused on the issue's own false premise",
|
|
1124
|
+
"premise", config_path=config_file,
|
|
1125
|
+
)
|
|
1126
|
+
|
|
1127
|
+
assert command.startswith(f"coord drive-queue clear-refusal {REPO} 4219 ")
|
|
1128
|
+
assert command.index("clear-refusal") < command.index("drive-queue remove")
|
|
1129
|
+
assert command.endswith(
|
|
1130
|
+
f"coord drive-queue remove {REPO} 4219 && coord drive-queue add {REPO} 4219"
|
|
1131
|
+
)
|
|
1132
|
+
|
|
1133
|
+
|
|
1134
|
+
def test_refusal_park_command_omits_clear_refusal_for_a_policy_refusal(
|
|
1135
|
+
monkeypatch, config_file,
|
|
1136
|
+
):
|
|
1137
|
+
"""A `refused_policy` verdict (#2234) has no `clear-refusal` equivalent —
|
|
1138
|
+
it is cleared by retargeting the GitHub issue by hand, which no CLI
|
|
1139
|
+
command expresses — so the proposed command is the delegated tail
|
|
1140
|
+
unchanged. #2871's stale-refusal bypass makes that plain requeue
|
|
1141
|
+
genuinely work once the retarget lands."""
|
|
1142
|
+
from coord.commands.drive_queue import _refusal_park_escalation_command
|
|
1143
|
+
from coord.drive_queue import entry_key
|
|
1144
|
+
|
|
1145
|
+
monkeypatch.setattr(
|
|
1146
|
+
"coord.commands.drive_queue._existing_pr_match",
|
|
1147
|
+
lambda config_path, repo, issue: None,
|
|
1148
|
+
)
|
|
1149
|
+
command = _refusal_park_escalation_command(
|
|
1150
|
+
None, entry_key(REPO, 4220), "refused: the deliverable is coordinator-only",
|
|
1151
|
+
"policy", config_path=config_file,
|
|
1152
|
+
)
|
|
1153
|
+
|
|
1154
|
+
assert command == (
|
|
1155
|
+
f"coord drive-queue remove {REPO} 4220 && coord drive-queue add {REPO} 4220"
|
|
1156
|
+
)
|
|
1157
|
+
assert "clear-refusal" not in command
|
|
1158
|
+
|
|
1159
|
+
|
|
1160
|
+
def test_refusal_park_command_omits_clear_refusal_when_the_tail_wont_redispatch(
|
|
1161
|
+
monkeypatch, config_file,
|
|
1162
|
+
):
|
|
1163
|
+
"""#2377's leg, reached through a premise refusal: an out-of-band green PR
|
|
1164
|
+
already exists for this entry, so the tail is `coord merge --only` and
|
|
1165
|
+
nothing is redispatched. Prepending `clear-refusal` there would assert a
|
|
1166
|
+
rechecked premise to unblock a dispatch that is not going to happen."""
|
|
1167
|
+
from coord.commands.drive_queue import _refusal_park_escalation_command
|
|
1168
|
+
from coord.drive_queue import ExistingPrMatch, entry_key
|
|
1169
|
+
|
|
1170
|
+
monkeypatch.setattr(
|
|
1171
|
+
"coord.commands.drive_queue._existing_pr_match",
|
|
1172
|
+
lambda config_path, repo, issue: ExistingPrMatch(
|
|
1173
|
+
number=4321,
|
|
1174
|
+
branch="issue-4219-prereq-landed",
|
|
1175
|
+
url="https://github.com/example/claude-coordinator/pull/4321",
|
|
1176
|
+
all_green=True,
|
|
1177
|
+
),
|
|
1178
|
+
)
|
|
1179
|
+
command = _refusal_park_escalation_command(
|
|
1180
|
+
None, entry_key(REPO, 4219), "refused on the issue's own false premise",
|
|
1181
|
+
"premise", config_path=config_file,
|
|
1182
|
+
)
|
|
1183
|
+
|
|
1184
|
+
assert command == f"coord merge --only {REPO}#4219"
|
|
1185
|
+
assert "clear-refusal" not in command
|
|
1186
|
+
|
|
1187
|
+
|
|
1096
1188
|
def test_a_declared_file_is_checked_against_a_live_branchs_real_diff(
|
|
1097
1189
|
cli, declare, seed, branch_diff,
|
|
1098
1190
|
):
|
|
@@ -2296,6 +2388,79 @@ def test_clear_refusal_requires_a_nonempty_reason(cli, seed):
|
|
|
2296
2388
|
assert "must not be empty" in result.output
|
|
2297
2389
|
|
|
2298
2390
|
|
|
2391
|
+
@pytest.mark.parametrize(
|
|
2392
|
+
"reason",
|
|
2393
|
+
[
|
|
2394
|
+
"<describe why the premise now holds>",
|
|
2395
|
+
"...",
|
|
2396
|
+
"…",
|
|
2397
|
+
"the prerequisite <name it> has landed",
|
|
2398
|
+
],
|
|
2399
|
+
)
|
|
2400
|
+
def test_clear_refusal_rejects_a_still_templated_reason(cli, seed, coord_db, reason):
|
|
2401
|
+
"""The recorded recheck is "a human's explicit, auditable assertion …
|
|
2402
|
+
never inferred" (`coord/drive.py`'s `decide()`), and `coord drive`
|
|
2403
|
+
dispatches fresh paid work off its mere presence. Several surfaces print
|
|
2404
|
+
the remediation chain WITH a placeholder in the `--reason` — `coord
|
|
2405
|
+
diagnose`'s `refused_premise` finding, the premise park reason, and the
|
|
2406
|
+
#3719 refusal-park escalation's `proposed_command`, which `coord escalate
|
|
2407
|
+
run` shells out blind. Copying one verbatim must fail here rather than
|
|
2408
|
+
record the template text as the assertion."""
|
|
2409
|
+
seed(assignments=[{"issue_number": 1650, "status": "refused_premise"}])
|
|
2410
|
+
|
|
2411
|
+
result = cli("clear-refusal", REPO, "1650", "--reason", reason)
|
|
2412
|
+
|
|
2413
|
+
assert result.exit_code != 0, result.output
|
|
2414
|
+
assert "still the placeholder text" in result.output
|
|
2415
|
+
row = coord_db.execute(
|
|
2416
|
+
"SELECT premise_rechecked_at, premise_rechecked_reason FROM assignments "
|
|
2417
|
+
"WHERE assignment_id = ?",
|
|
2418
|
+
("a-claude-coordinator-0",),
|
|
2419
|
+
).fetchone()
|
|
2420
|
+
assert row["premise_rechecked_at"] is None
|
|
2421
|
+
assert row["premise_rechecked_reason"] is None
|
|
2422
|
+
|
|
2423
|
+
|
|
2424
|
+
def test_the_refusal_escalations_own_proposed_command_fails_closed(
|
|
2425
|
+
cli, seed, coord_db, monkeypatch, config_file,
|
|
2426
|
+
):
|
|
2427
|
+
"""`drive_escalations.proposed_command` is executed BLIND: `coord escalate
|
|
2428
|
+
run` shells the whole string out with no confirmation prompt and, unless
|
|
2429
|
+
it exits non-zero, dismisses the escalation as resolved. So the premise
|
|
2430
|
+
remedy's placeholder `--reason` is only safe while `clear-refusal` keeps
|
|
2431
|
+
rejecting it — this reads the placeholder back out of the command the
|
|
2432
|
+
sweep actually proposes and asserts a blind run dies on the FIRST step,
|
|
2433
|
+
before any requeue and with no fabricated recheck recorded."""
|
|
2434
|
+
import shlex
|
|
2435
|
+
|
|
2436
|
+
from coord.commands.drive_queue import _refusal_park_escalation_command
|
|
2437
|
+
from coord.drive_queue import entry_key
|
|
2438
|
+
|
|
2439
|
+
monkeypatch.setattr(
|
|
2440
|
+
"coord.commands.drive_queue._existing_pr_match",
|
|
2441
|
+
lambda config_path, repo, issue: None,
|
|
2442
|
+
)
|
|
2443
|
+
proposed = _refusal_park_escalation_command(
|
|
2444
|
+
None, entry_key(REPO, 1650), "refused on the issue's own false premise",
|
|
2445
|
+
"premise", config_path=config_file,
|
|
2446
|
+
)
|
|
2447
|
+
first_step, _, requeue = proposed.partition(" && ")
|
|
2448
|
+
argv = shlex.split(first_step)
|
|
2449
|
+
assert argv[:4] == ["coord", "drive-queue", "clear-refusal", REPO]
|
|
2450
|
+
assert "drive-queue add" in requeue # the step that must never be reached
|
|
2451
|
+
reason = argv[argv.index("--reason") + 1]
|
|
2452
|
+
|
|
2453
|
+
seed(assignments=[{"issue_number": 1650, "status": "refused_premise"}])
|
|
2454
|
+
result = cli("clear-refusal", REPO, "1650", "--reason", reason)
|
|
2455
|
+
|
|
2456
|
+
assert result.exit_code != 0, result.output
|
|
2457
|
+
row = coord_db.execute(
|
|
2458
|
+
"SELECT premise_rechecked_at FROM assignments WHERE assignment_id = ?",
|
|
2459
|
+
("a-claude-coordinator-0",),
|
|
2460
|
+
).fetchone()
|
|
2461
|
+
assert row["premise_rechecked_at"] is None
|
|
2462
|
+
|
|
2463
|
+
|
|
2299
2464
|
# ── remove owns the driver it orphans (#3282) ───────────────────────────────
|
|
2300
2465
|
#
|
|
2301
2466
|
# Before this fix, `remove` deleted only the queue row: a driver already
|
|
@@ -3094,6 +3259,87 @@ def test_a_dead_drives_own_exit_reason_reaches_the_queue_row(
|
|
|
3094
3259
|
assert state._get_drive_escalation_local(REPO, 1762) is not None
|
|
3095
3260
|
|
|
3096
3261
|
|
|
3262
|
+
def test_a_premise_refusal_park_escalates_exactly_once(
|
|
3263
|
+
cli, seed, launches, coord_db, monkeypatch,
|
|
3264
|
+
):
|
|
3265
|
+
"""#3719: a premise refusal (#3164) parks the entry, but unlike a
|
|
3266
|
+
`merge_ci_pending` park it never clears itself — `plan_tick`'s
|
|
3267
|
+
STATE_PARKED pre-pass just `continue`s on it forever (see
|
|
3268
|
+
`test_a_parked_policy_refusal_does_not_auto_resume_next_tick` in
|
|
3269
|
+
tests/test_drive_queue.py). Before this issue, that meant the entry
|
|
3270
|
+
sat parked and invisible until an operator happened to go looking in
|
|
3271
|
+
`coord drive-queue list`. The very tick that first parks it must now
|
|
3272
|
+
also write a `drive_escalations` row naming the human decision needed
|
|
3273
|
+
(confirm the premise now holds) and, as the mechanical half, a
|
|
3274
|
+
`clear-refusal` ahead of the requeue — `coord drive`'s `decide()` keys
|
|
3275
|
+
off the latest work assignment's own status column, so a bare requeue
|
|
3276
|
+
without first clearing the refusal would just die on it again. Because
|
|
3277
|
+
the pre-pass never re-emits a `Reconcile` for an already-parked entry, a
|
|
3278
|
+
second tick must NOT write a second escalation.
|
|
3279
|
+
"""
|
|
3280
|
+
from coord.audit import record_audit
|
|
3281
|
+
from coord.models import PREMISE_REFUSAL_MARKER
|
|
3282
|
+
from coord import state as state_module
|
|
3283
|
+
|
|
3284
|
+
calls = []
|
|
3285
|
+
real_record = state_module.record_drive_escalation
|
|
3286
|
+
|
|
3287
|
+
def _spy(*args, **kwargs):
|
|
3288
|
+
calls.append((args, kwargs))
|
|
3289
|
+
return real_record(*args, **kwargs)
|
|
3290
|
+
|
|
3291
|
+
monkeypatch.setattr(state_module, "record_drive_escalation", _spy)
|
|
3292
|
+
|
|
3293
|
+
seed(issues={4219: "open"})
|
|
3294
|
+
cli("add", REPO, "4219")
|
|
3295
|
+
cli("tick")
|
|
3296
|
+
|
|
3297
|
+
reason = (
|
|
3298
|
+
f"drive exited for {REPO}#4219 (exit_code=1): work 721861c90bf3 "
|
|
3299
|
+
"refused on the issue's own false premise rather than doing the "
|
|
3300
|
+
f"dispatched work — the worker did the CORRECT thing (#3164). "
|
|
3301
|
+
f"{PREMISE_REFUSAL_MARKER}"
|
|
3302
|
+
)
|
|
3303
|
+
launched_at = queued(4219)["launched_at"]
|
|
3304
|
+
_backdate(4219, DRIVE_STARTUP_GRACE_SECONDS + 60)
|
|
3305
|
+
record_audit(
|
|
3306
|
+
tier="business", category="drive", event_type="drive_exited",
|
|
3307
|
+
actor="drive", summary=reason, repo=REPO, issue=4219,
|
|
3308
|
+
ts=launched_at + 5,
|
|
3309
|
+
)
|
|
3310
|
+
result = cli("tick")
|
|
3311
|
+
assert result.exit_code == 0, result.output
|
|
3312
|
+
|
|
3313
|
+
entry = queued(4219)
|
|
3314
|
+
assert entry["state"] == "parked"
|
|
3315
|
+
assert entry["attempts"] == 0
|
|
3316
|
+
|
|
3317
|
+
escalation = state._get_drive_escalation_local(REPO, 4219)
|
|
3318
|
+
assert escalation is not None
|
|
3319
|
+
proposed = escalation["proposed_command"]
|
|
3320
|
+
assert "coord drive-queue clear-refusal" in proposed
|
|
3321
|
+
assert "coord drive-queue remove" in proposed
|
|
3322
|
+
assert "coord drive-queue add" in proposed
|
|
3323
|
+
# The clear-refusal must run BEFORE the requeue it precedes, or the
|
|
3324
|
+
# requeue's own redispatch races the still-unset premise-recheck flag.
|
|
3325
|
+
assert proposed.index("clear-refusal") < proposed.index("remove")
|
|
3326
|
+
assert PREMISE_REFUSAL_MARKER in escalation["reason"]
|
|
3327
|
+
assert "refusal=premise" in escalation["gate_readings"]
|
|
3328
|
+
first_created_at = escalation["created_at"]
|
|
3329
|
+
assert len(calls) == 1, calls
|
|
3330
|
+
|
|
3331
|
+
# A second tick: the entry stays parked, no second escalation write.
|
|
3332
|
+
second = cli("tick")
|
|
3333
|
+
assert second.exit_code == 0, second.output
|
|
3334
|
+
assert queued(4219)["state"] == "parked"
|
|
3335
|
+
still = state._get_drive_escalation_local(REPO, 4219)
|
|
3336
|
+
assert still is not None
|
|
3337
|
+
assert still["created_at"] == first_created_at
|
|
3338
|
+
# The actual write call count — not just the preserved `created_at` —
|
|
3339
|
+
# is the assertion that would fail if the sweep re-escalated.
|
|
3340
|
+
assert len(calls) == 1, calls
|
|
3341
|
+
|
|
3342
|
+
|
|
3097
3343
|
def test_exhausted_ci_stale_escalation_proposes_revalidate_not_a_requeue(
|
|
3098
3344
|
cli, seed, launches, coord_db, config_file
|
|
3099
3345
|
):
|
|
@@ -3386,6 +3632,27 @@ def test_a_still_parked_entry_stays_parked_across_a_quiet_tick(
|
|
|
3386
3632
|
assert len(launches) == 1, launches # no second launch attempt
|
|
3387
3633
|
|
|
3388
3634
|
|
|
3635
|
+
def test_a_merge_ci_pending_park_never_escalates(cli, seed, launches, coord_db):
|
|
3636
|
+
"""#3719's sweep targets only the two causes a human must decide
|
|
3637
|
+
(policy/premise refusal) — a `merge_ci_pending` park is self-healing
|
|
3638
|
+
(the pre-pass in `plan_tick` resumes it the moment CI reports), so it
|
|
3639
|
+
must never write a `drive_escalations` row, no matter how many quiet
|
|
3640
|
+
ticks it sits through."""
|
|
3641
|
+
seed(issues={1762: "open"})
|
|
3642
|
+
cli("add", REPO, "1762")
|
|
3643
|
+
cli("tick")
|
|
3644
|
+
_seed_ci_pending_merge_row(coord_db, 1762)
|
|
3645
|
+
_backdate(1762, DRIVE_STARTUP_GRACE_SECONDS + 60)
|
|
3646
|
+
cli("tick")
|
|
3647
|
+
assert queued(1762)["state"] == "parked"
|
|
3648
|
+
assert state._get_drive_escalation_local(REPO, 1762) is None
|
|
3649
|
+
|
|
3650
|
+
result = cli("tick")
|
|
3651
|
+
assert result.exit_code == 0, result.output
|
|
3652
|
+
assert queued(1762)["state"] == "parked"
|
|
3653
|
+
assert state._get_drive_escalation_local(REPO, 1762) is None
|
|
3654
|
+
|
|
3655
|
+
|
|
3389
3656
|
# ── #2158: a park must have an exit that is not the merge it blocks ────────
|
|
3390
3657
|
#
|
|
3391
3658
|
# #1891's resume predicate was refreshable ONLY by a live `coord merge`
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/requires.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
{code_coordinator-0.5.648 → code_coordinator-0.5.649}/code_coordinator.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|