code-coordinator 0.5.495__tar.gz → 0.5.497__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.495 → code_coordinator-0.5.497}/PKG-INFO +1 -1
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/scm_file_list.json +1 -0
- code_coordinator-0.5.497/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/drive_queue.py +377 -24
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/config.py +29 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497/coord}/deploy/coord-drive-queue.service +45 -33
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/drive_queue.py +58 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/overlap_predict.py +86 -0
- {code_coordinator-0.5.495/coord → code_coordinator-0.5.497}/deploy/coord-drive-queue.service +45 -33
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_drive_queue.py +157 -1
- code_coordinator-0.5.497/tests/test_drive_queue_max_parallel_config.py +371 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_overlap_predict.py +56 -0
- code_coordinator-0.5.495/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/.gitignore +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/CLAUDE.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/GOAL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/LICENSE +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/MANIFEST.in +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/README.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/__init__.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agent.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/audit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/backup.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/block_log.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/board_service.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/brain.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/claim.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/cli.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/client.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/codegen.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/comments.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dao.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/db.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/deps.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/drive.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/events.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/filelock.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/freshness.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gates.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/goal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/context.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/models.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/render.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/health/units.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/hooks.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/interactive.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/models.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/network.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/notify.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/openapi.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/parentage.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/plans.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/progress.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/release_window.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/reports.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/review.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/self_health.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/smoke.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/split_work.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/sql.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/state.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/test_author.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/test_report.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/usage.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/install-agent.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/pyproject.toml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/setup.cfg +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/__init__.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/backends.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/conftest.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_client.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_db.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_events.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_init.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_models.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_network.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_session.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_split.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_state.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.495 → code_coordinator-0.5.497}/tests/write_parity.py +0 -0
|
@@ -613,6 +613,7 @@ tests/test_drive_machine_fault.py
|
|
|
613
613
|
tests/test_drive_queue.py
|
|
614
614
|
tests/test_drive_queue_blocked_rendering.py
|
|
615
615
|
tests/test_drive_queue_launch_argv.py
|
|
616
|
+
tests/test_drive_queue_max_parallel_config.py
|
|
616
617
|
tests/test_drive_queue_max_parallel_per_repo_config.py
|
|
617
618
|
tests/test_drive_queue_roll_pending.py
|
|
618
619
|
tests/test_drive_queue_self_cordon_escalation.py
|
{code_coordinator-0.5.495 → code_coordinator-0.5.497}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -639,6 +639,7 @@
|
|
|
639
639
|
"tests/test_drive_queue.py",
|
|
640
640
|
"tests/test_drive_queue_blocked_rendering.py",
|
|
641
641
|
"tests/test_drive_queue_launch_argv.py",
|
|
642
|
+
"tests/test_drive_queue_max_parallel_config.py",
|
|
642
643
|
"tests/test_drive_queue_max_parallel_per_repo_config.py",
|
|
643
644
|
"tests/test_drive_queue_roll_pending.py",
|
|
644
645
|
"tests/test_drive_queue_self_cordon_escalation.py",
|
|
@@ -35,7 +35,7 @@ import socket
|
|
|
35
35
|
import subprocess
|
|
36
36
|
import time
|
|
37
37
|
from pathlib import Path
|
|
38
|
-
from typing import TYPE_CHECKING, Any, Mapping
|
|
38
|
+
from typing import TYPE_CHECKING, Any, Mapping, Sequence
|
|
39
39
|
|
|
40
40
|
import click
|
|
41
41
|
|
|
@@ -46,6 +46,7 @@ from coord.drive_queue import (
|
|
|
46
46
|
APPLY_APPLIED,
|
|
47
47
|
APPLY_FAILED,
|
|
48
48
|
DEFAULT_MAX_ATTEMPTS,
|
|
49
|
+
DEFAULT_MAX_PARALLEL,
|
|
49
50
|
DEFAULT_MAX_PARALLEL_PER_REPO,
|
|
50
51
|
HOLD_FIRED,
|
|
51
52
|
HOLD_RELEASED,
|
|
@@ -77,6 +78,7 @@ from coord.drive_queue import (
|
|
|
77
78
|
add_preflight_notice,
|
|
78
79
|
apply_gate_status,
|
|
79
80
|
build_board_view,
|
|
81
|
+
default_max_parallel,
|
|
80
82
|
detect_unreachable_waits,
|
|
81
83
|
diagnose_blocked_after,
|
|
82
84
|
effective_max_fix_rounds,
|
|
@@ -109,6 +111,7 @@ from coord.overlap_predict import (
|
|
|
109
111
|
EVENT_SCORED,
|
|
110
112
|
OUTCOME_UNKNOWN,
|
|
111
113
|
SOURCE_DECLARED,
|
|
114
|
+
Overlap,
|
|
112
115
|
Prediction,
|
|
113
116
|
classify_outcome,
|
|
114
117
|
collect_candidate_files,
|
|
@@ -116,6 +119,7 @@ from coord.overlap_predict import (
|
|
|
116
119
|
fanout_warnings,
|
|
117
120
|
inflight_footprints,
|
|
118
121
|
malformed_files_warning,
|
|
122
|
+
overlap_would_run_before,
|
|
119
123
|
parse_declared_files,
|
|
120
124
|
predict_overlap,
|
|
121
125
|
predictions_from_audit,
|
|
@@ -463,12 +467,38 @@ def drive_queue_add(
|
|
|
463
467
|
malformed_note = ""
|
|
464
468
|
auto_after: list[str] = []
|
|
465
469
|
rejected_after: list[str] = []
|
|
470
|
+
# #3395 rule 2: overlaps against an already-queued, not-yet-dispatched
|
|
471
|
+
# entry that THIS add is positioning ahead of — the edge for those goes
|
|
472
|
+
# on the INCUMBENT (`entry --after this add`), applied further down once
|
|
473
|
+
# this add's own row exists, never on `after` above (that would chain
|
|
474
|
+
# this add behind an entry it is about to run in front of).
|
|
475
|
+
reverse_candidates: list[tuple[QueueEntry, Overlap]] = []
|
|
476
|
+
reverse_rejected: list[str] = []
|
|
466
477
|
if not no_predict_overlap:
|
|
467
478
|
prediction, staleness_note, malformed_note = _predict_overlap(
|
|
468
479
|
config_path, repo, issue, existing_entries
|
|
469
480
|
)
|
|
481
|
+
effective_position = _resolve_effective_new_position(position, previous)
|
|
482
|
+
forward_keys, all_reverse = _partition_overlap_after(
|
|
483
|
+
existing_entries,
|
|
484
|
+
effective_position,
|
|
485
|
+
prediction,
|
|
486
|
+
previous_position=previous.position if previous is not None else None,
|
|
487
|
+
)
|
|
488
|
+
# #2603's --reject-after is the same narrower escape hatch for a
|
|
489
|
+
# REVERSED edge too — it names the OTHER entry's key either way, so
|
|
490
|
+
# an operator does not need to know which direction rule 2 picked to
|
|
491
|
+
# veto it.
|
|
492
|
+
reverse_candidates = [
|
|
493
|
+
(entry, overlap) for entry, overlap in all_reverse
|
|
494
|
+
if entry.key not in reject_after
|
|
495
|
+
]
|
|
496
|
+
reverse_rejected = [
|
|
497
|
+
entry.key for entry, _overlap in all_reverse if entry.key in reject_after
|
|
498
|
+
]
|
|
470
499
|
candidate_after = _applicable_auto_after(
|
|
471
|
-
existing_entries, repo, issue, after, prediction
|
|
500
|
+
existing_entries, repo, issue, after, prediction,
|
|
501
|
+
candidate_keys=forward_keys,
|
|
472
502
|
)
|
|
473
503
|
# #2603: --reject-after is the narrower escape hatch — it drops only
|
|
474
504
|
# the named edge(s) from what actually gets applied, never the whole
|
|
@@ -491,6 +521,18 @@ def drive_queue_add(
|
|
|
491
521
|
no_acceptance=no_acceptance,
|
|
492
522
|
plan_destructive=plan_destructive,
|
|
493
523
|
)
|
|
524
|
+
# #3395: apply the REVERSED edges rule 2 selected — writing to the
|
|
525
|
+
# INCUMBENT entry's own row, now that this add's row exists to name as
|
|
526
|
+
# its `--after`. Must run after the write above: it names `entry_key
|
|
527
|
+
# (repo, issue)` as a pre-req, and while nothing here checks the row for
|
|
528
|
+
# existence, doing this first keeps the audit trail (both events land in
|
|
529
|
+
# enqueue order, not out of order relative to `queued ...`) intuitive to
|
|
530
|
+
# read back.
|
|
531
|
+
reverse_applied: list[tuple[QueueEntry, Overlap]] = []
|
|
532
|
+
if reverse_candidates:
|
|
533
|
+
reverse_applied = _apply_reversed_overlap_after(
|
|
534
|
+
existing_entries, entry_key(repo, issue), after, reverse_candidates,
|
|
535
|
+
)
|
|
494
536
|
# #2839: queueing a drive is a strictly STRONGER statement than "send to
|
|
495
537
|
# Pipeline" (`coord track`), so it must never leave the issue in a
|
|
496
538
|
# weaker label state — apply the same `coord` + `status:ready` labels
|
|
@@ -540,13 +582,22 @@ def drive_queue_add(
|
|
|
540
582
|
# --reject-after confirmation above: an author who wrote a declaration
|
|
541
583
|
# that never took must not see output byte-identical to "declared
|
|
542
584
|
# nothing".
|
|
585
|
+
# #3395: plus, for every REVERSED edge rule 2 applied, a line naming the
|
|
586
|
+
# INCUMBENT entry and why the direction is flipped from #2247's usual
|
|
587
|
+
# "ordered --after" reading — an unexplained edge on a row OTHER than
|
|
588
|
+
# the one this `add` named is exactly the kind of surprise an operator
|
|
589
|
+
# needs the reason for immediately, not by going and reading that row's
|
|
590
|
+
# own `last_reason` separately.
|
|
543
591
|
overlap_notes: list[str] = []
|
|
544
592
|
if auto_after:
|
|
545
593
|
overlap_notes.append(prediction.reason)
|
|
546
594
|
overlap_notes.extend(_declared_overlap_age_notes(prediction, auto_after))
|
|
547
|
-
|
|
595
|
+
for entry, overlap in reverse_applied:
|
|
596
|
+
overlap_notes.append(_reverse_overlap_reason(entry_key(repo, issue), overlap))
|
|
597
|
+
all_rejected = [*rejected_after, *reverse_rejected]
|
|
598
|
+
if all_rejected:
|
|
548
599
|
overlap_notes.append(
|
|
549
|
-
"rejected via --reject-after (not applied): " + ", ".join(
|
|
600
|
+
"rejected via --reject-after (not applied): " + ", ".join(all_rejected)
|
|
550
601
|
)
|
|
551
602
|
overlap_notes.extend(fanout_warnings(prediction))
|
|
552
603
|
if malformed_note:
|
|
@@ -923,6 +974,8 @@ def _applicable_auto_after(
|
|
|
923
974
|
issue: int,
|
|
924
975
|
after: list[str],
|
|
925
976
|
prediction: Prediction,
|
|
977
|
+
*,
|
|
978
|
+
candidate_keys: Sequence[str] | None = None,
|
|
926
979
|
) -> list[str]:
|
|
927
980
|
"""The predicted pre-reqs that are actually safe to add.
|
|
928
981
|
|
|
@@ -931,9 +984,20 @@ def _applicable_auto_after(
|
|
|
931
984
|
dropped if it would self-edge or close a cycle — the opposite posture to
|
|
932
985
|
`validate_enqueue`'s treatment of an operator-declared `--after`, which is
|
|
933
986
|
a typo worth reporting.
|
|
987
|
+
|
|
988
|
+
#3395: *candidate_keys* narrows which of `prediction.after_keys` this
|
|
989
|
+
call even considers — `None` (the default, unused by `drive_queue_add`'s
|
|
990
|
+
own call today but kept for a caller that wants pre-#3395 behaviour, or
|
|
991
|
+
a future direct test) keeps the pre-#3395 behaviour of trying all of
|
|
992
|
+
them. `drive_queue_add` passes the FORWARD subset only:
|
|
993
|
+
`_partition_overlap_after` has already routed the REVERSED ones (a
|
|
994
|
+
newcomer positioned ahead of an overlapping, not-yet-dispatched entry) to
|
|
995
|
+
`_apply_reversed_overlap_after` instead, and chaining this entry after
|
|
996
|
+
them TOO would apply rule 2's edge twice, in both directions.
|
|
934
997
|
"""
|
|
998
|
+
keys = prediction.after_keys if candidate_keys is None else tuple(candidate_keys)
|
|
935
999
|
applied: list[str] = []
|
|
936
|
-
for candidate_key in
|
|
1000
|
+
for candidate_key in keys:
|
|
937
1001
|
if candidate_key in after or candidate_key in applied:
|
|
938
1002
|
continue
|
|
939
1003
|
try:
|
|
@@ -946,6 +1010,226 @@ def _applicable_auto_after(
|
|
|
946
1010
|
return applied
|
|
947
1011
|
|
|
948
1012
|
|
|
1013
|
+
def _resolve_effective_new_position(
|
|
1014
|
+
position: int | None, previous: QueueEntry | None,
|
|
1015
|
+
) -> int | None:
|
|
1016
|
+
"""#3395: the position this `add` actually leaves the entry at, for
|
|
1017
|
+
:func:`coord.overlap_predict.overlap_would_run_before` to compare against.
|
|
1018
|
+
|
|
1019
|
+
An explicit ``--position`` wins outright. Otherwise, re-adding an
|
|
1020
|
+
already-queued entry keeps its CURRENT position — `enqueue_drive_queue`
|
|
1021
|
+
never moves a row unless `position` is given — so that position is what
|
|
1022
|
+
the entry will actually run at. A brand-new entry with no `--position`
|
|
1023
|
+
appends at the tail (``None``, `overlap_would_run_before`'s own "never
|
|
1024
|
+
ahead of anything" case) — there is no meaningful position yet.
|
|
1025
|
+
"""
|
|
1026
|
+
if position is not None:
|
|
1027
|
+
return position
|
|
1028
|
+
if previous is not None:
|
|
1029
|
+
return previous.position
|
|
1030
|
+
return None
|
|
1031
|
+
|
|
1032
|
+
|
|
1033
|
+
def _partition_overlap_after(
|
|
1034
|
+
existing_entries: list[QueueEntry],
|
|
1035
|
+
effective_position: int | None,
|
|
1036
|
+
prediction: Prediction,
|
|
1037
|
+
*,
|
|
1038
|
+
previous_position: int | None = None,
|
|
1039
|
+
) -> tuple[list[str], list[tuple[QueueEntry, Overlap]]]:
|
|
1040
|
+
"""#3395 rule 2: split predicted overlaps by which direction the
|
|
1041
|
+
``--after`` edge belongs in.
|
|
1042
|
+
|
|
1043
|
+
FORWARD (returned as plain keys, same shape `_applicable_auto_after`
|
|
1044
|
+
always took) is correct whenever the other side either is already
|
|
1045
|
+
running (`[branch]` — it started before this `add` regardless of queue
|
|
1046
|
+
position) or is queued but will still dispatch no earlier than this
|
|
1047
|
+
newcomer. REVERSE (returned paired with the other side's own
|
|
1048
|
+
`QueueEntry`, since applying it means writing to THAT row, not this one)
|
|
1049
|
+
is the case the issue is about: a `[declared]` overlap against an entry
|
|
1050
|
+
that is still queued but is about to be pushed BEHIND this newcomer in
|
|
1051
|
+
dispatch order. Chaining the newcomer after it there would force the
|
|
1052
|
+
newcomer to run last despite the operator's own `--position`, while the
|
|
1053
|
+
incumbent — now scheduled first — would carry no edge stopping it from
|
|
1054
|
+
colliding with the newcomer's fresher files.
|
|
1055
|
+
|
|
1056
|
+
An overlap naming a key with no matching `QueueEntry` (the declared
|
|
1057
|
+
footprint disappeared between prediction and this call — a `remove` race,
|
|
1058
|
+
vanishingly rare) falls back to FORWARD: the safe, pre-#3395 default.
|
|
1059
|
+
|
|
1060
|
+
``previous_position`` is the target's OWN position before this call —
|
|
1061
|
+
`None` for a brand-new entry, the row's current position when this
|
|
1062
|
+
`add` is REPOSITIONING an already-queued entry. Passed straight through
|
|
1063
|
+
to `overlap_would_run_before`, which needs it to account for
|
|
1064
|
+
`_move_drive_queue_entry_local`'s remove-then-reinsert shift: without
|
|
1065
|
+
it, the direction decision compares `other`'s stale pre-removal
|
|
1066
|
+
position and can pick the REVERSE edge when FORWARD is actually correct
|
|
1067
|
+
(or vice versa) — see that function's docstring for the full case
|
|
1068
|
+
analysis.
|
|
1069
|
+
"""
|
|
1070
|
+
entries_by_key = {e.key: e for e in existing_entries}
|
|
1071
|
+
forward: list[str] = []
|
|
1072
|
+
reverse: list[tuple[QueueEntry, Overlap]] = []
|
|
1073
|
+
for overlap in prediction.overlaps:
|
|
1074
|
+
other = entries_by_key.get(overlap.key)
|
|
1075
|
+
if (
|
|
1076
|
+
overlap.source == SOURCE_DECLARED
|
|
1077
|
+
and other is not None
|
|
1078
|
+
and overlap_would_run_before(
|
|
1079
|
+
effective_position,
|
|
1080
|
+
other.position,
|
|
1081
|
+
previous_position=previous_position,
|
|
1082
|
+
)
|
|
1083
|
+
):
|
|
1084
|
+
reverse.append((other, overlap))
|
|
1085
|
+
else:
|
|
1086
|
+
forward.append(overlap.key)
|
|
1087
|
+
return forward, reverse
|
|
1088
|
+
|
|
1089
|
+
|
|
1090
|
+
def _apply_reversed_overlap_after(
|
|
1091
|
+
existing_entries: list[QueueEntry],
|
|
1092
|
+
new_key: str,
|
|
1093
|
+
new_key_after: Sequence[str],
|
|
1094
|
+
reverse_candidates: list[tuple[QueueEntry, Overlap]],
|
|
1095
|
+
) -> list[tuple[QueueEntry, Overlap]]:
|
|
1096
|
+
"""#3395: apply the REVERSED edges `_partition_overlap_after` identified
|
|
1097
|
+
— chain each incumbent entry ``--after`` the newcomer, since the
|
|
1098
|
+
newcomer is the one that will actually dispatch first.
|
|
1099
|
+
|
|
1100
|
+
Same fail-safe posture as `_applicable_auto_after`: a would-be cycle is
|
|
1101
|
+
silently dropped rather than failing this `add` (an INFERRED edge must
|
|
1102
|
+
never be able to refuse an operator's own `--position`), and an edge that
|
|
1103
|
+
already exists on the incumbent is left alone (no redundant write).
|
|
1104
|
+
Every OTHER operator-declared field on the incumbent's row (`machine`,
|
|
1105
|
+
the hold gate, `max_fix_rounds`, ...) is carried through unchanged —
|
|
1106
|
+
`enqueue_drive_queue` fully replaces those columns on every call, so
|
|
1107
|
+
omitting one here would silently clear it off a row this `add` was never
|
|
1108
|
+
asked to touch.
|
|
1109
|
+
|
|
1110
|
+
``new_key_after`` is the newcomer's OWN final ``--after`` list from this
|
|
1111
|
+
same `add` (operator-declared plus rule 1's forward auto-chains). The
|
|
1112
|
+
cycle check below builds its own edge graph rather than reusing
|
|
1113
|
+
`validate_enqueue` directly, because `existing_entries` is the pre-write
|
|
1114
|
+
snapshot: it never contains the newcomer's row (a brand-new entry) and,
|
|
1115
|
+
on a reposition, contains only its STALE pre-`add` edges — so a
|
|
1116
|
+
`validate_enqueue` call scoped to just the incumbent's candidate edge
|
|
1117
|
+
cannot see the newcomer's own outgoing edges and would miss a two-node
|
|
1118
|
+
cycle this single `add` invocation introduces (rule 1 chains the
|
|
1119
|
+
newcomer after an overlapping incumbent, rule 2 separately wants that
|
|
1120
|
+
same incumbent chained after the newcomer). Including `new_key_after` as
|
|
1121
|
+
the newcomer's node in the graph here closes that gap; the tick's own
|
|
1122
|
+
full-graph `find_cycle` would otherwise be the only thing to catch it,
|
|
1123
|
+
after the fact.
|
|
1124
|
+
"""
|
|
1125
|
+
from coord.state import enqueue_drive_queue # noqa: PLC0415
|
|
1126
|
+
|
|
1127
|
+
applied: list[tuple[QueueEntry, Overlap]] = []
|
|
1128
|
+
base_edges: dict[str, list[str]] = {
|
|
1129
|
+
e.key: list(e.after) for e in existing_entries if e.key != new_key
|
|
1130
|
+
}
|
|
1131
|
+
base_edges[new_key] = [str(a) for a in new_key_after]
|
|
1132
|
+
for entry, overlap in reverse_candidates:
|
|
1133
|
+
if new_key in entry.after:
|
|
1134
|
+
applied.append((entry, overlap))
|
|
1135
|
+
continue
|
|
1136
|
+
new_after = [*entry.after, new_key]
|
|
1137
|
+
trial_edges = dict(base_edges)
|
|
1138
|
+
trial_edges[entry.key] = new_after
|
|
1139
|
+
if find_cycle(trial_edges) is not None:
|
|
1140
|
+
continue
|
|
1141
|
+
enqueue_drive_queue(
|
|
1142
|
+
entry.repo,
|
|
1143
|
+
entry.issue,
|
|
1144
|
+
machine=entry.machine or None,
|
|
1145
|
+
after=new_after,
|
|
1146
|
+
position=None,
|
|
1147
|
+
hold_after=entry.hold_after,
|
|
1148
|
+
hold_reason=entry.hold_reason,
|
|
1149
|
+
resume_when=entry.resume_when,
|
|
1150
|
+
hold_scope=entry.hold_scope,
|
|
1151
|
+
max_fix_rounds=entry.max_fix_rounds,
|
|
1152
|
+
no_acceptance=entry.no_acceptance,
|
|
1153
|
+
plan_destructive=entry.plan_destructive,
|
|
1154
|
+
)
|
|
1155
|
+
applied.append((entry, overlap))
|
|
1156
|
+
_record_reverse_overlap_prediction(entry.repo, entry.issue, new_key, overlap)
|
|
1157
|
+
return applied
|
|
1158
|
+
|
|
1159
|
+
|
|
1160
|
+
def _reverse_overlap_reason(new_key: str, overlap: Overlap) -> str:
|
|
1161
|
+
"""#3395: the one sentence shared by `add`'s stdout, the audit summary,
|
|
1162
|
+
and the INCUMBENT's own `last_reason` for a REVERSED edge — so all three
|
|
1163
|
+
surfaces agree on why a row this `add` never named got a new `after=`.
|
|
1164
|
+
"""
|
|
1165
|
+
return (
|
|
1166
|
+
"predicted file overlap (#2247) — ordered "
|
|
1167
|
+
+ overlap.describe_reversed(new_key)
|
|
1168
|
+
+ " (#3395: this add was positioned ahead of an existing queued entry)"
|
|
1169
|
+
)
|
|
1170
|
+
|
|
1171
|
+
|
|
1172
|
+
def _record_reverse_overlap_prediction(
|
|
1173
|
+
repo: str, issue: int, new_key: str, overlap: Overlap,
|
|
1174
|
+
) -> None:
|
|
1175
|
+
"""#3395: the audit + `last_reason` twin of `_record_overlap_prediction`
|
|
1176
|
+
for a REVERSED edge — recorded against *repo*/*issue*, the INCUMBENT
|
|
1177
|
+
entry that actually got the new `after=` write, not the entry `add` was
|
|
1178
|
+
called for. Mirrors `_record_overlap_prediction`'s two sinks (a durable
|
|
1179
|
+
audit row, plus the `last_reason` column an operator reading `coord
|
|
1180
|
+
drive-queue list` sees immediately) for the same reason: a `last_reason`
|
|
1181
|
+
the next tick attempt will overwrite is not durable, so the claim also
|
|
1182
|
+
needs a permanent home to be scored later.
|
|
1183
|
+
|
|
1184
|
+
Kept as its own event rather than reusing `Prediction.audit_details()`
|
|
1185
|
+
verbatim: that payload's `after` list and `predicted_files` are framed
|
|
1186
|
+
from the CANDIDATE's point of view (`_predict_overlap` computed them
|
|
1187
|
+
that way), and reusing it here unedited would misrepresent whose files
|
|
1188
|
+
were actually being ordered against whose.
|
|
1189
|
+
"""
|
|
1190
|
+
reason = _reverse_overlap_reason(new_key, overlap)
|
|
1191
|
+
details = {
|
|
1192
|
+
"predicted_files": list(overlap.files),
|
|
1193
|
+
"overlaps": [
|
|
1194
|
+
{
|
|
1195
|
+
"key": new_key,
|
|
1196
|
+
"source": overlap.source,
|
|
1197
|
+
"branch": overlap.branch,
|
|
1198
|
+
"head_sha": overlap.head_sha,
|
|
1199
|
+
"synced_at": overlap.synced_at,
|
|
1200
|
+
"liveness_checked": overlap.liveness_checked,
|
|
1201
|
+
"files": list(overlap.files),
|
|
1202
|
+
}
|
|
1203
|
+
],
|
|
1204
|
+
"after": [new_key],
|
|
1205
|
+
# #3395: the one field with no forward-edge equivalent — lets a later
|
|
1206
|
+
# reader (a human, `overlap-report`) tell this row's `after=` was
|
|
1207
|
+
# rule 2's reversal, not an ordinary same-direction prediction.
|
|
1208
|
+
"reversed": True,
|
|
1209
|
+
}
|
|
1210
|
+
try:
|
|
1211
|
+
from coord.audit import record_audit # noqa: PLC0415
|
|
1212
|
+
|
|
1213
|
+
record_audit(
|
|
1214
|
+
tier="business",
|
|
1215
|
+
category=AUDIT_CATEGORY,
|
|
1216
|
+
event_type=EVENT_PREDICTED,
|
|
1217
|
+
actor="drive-queue",
|
|
1218
|
+
summary=reason,
|
|
1219
|
+
repo=repo,
|
|
1220
|
+
issue=issue,
|
|
1221
|
+
details=details,
|
|
1222
|
+
)
|
|
1223
|
+
except Exception: # noqa: BLE001 — recording must never fail the enqueue
|
|
1224
|
+
pass
|
|
1225
|
+
try:
|
|
1226
|
+
from coord.state import update_drive_queue_entry # noqa: PLC0415
|
|
1227
|
+
|
|
1228
|
+
update_drive_queue_entry(repo, issue, last_reason=reason)
|
|
1229
|
+
except Exception: # noqa: BLE001 — same
|
|
1230
|
+
pass
|
|
1231
|
+
|
|
1232
|
+
|
|
949
1233
|
def _record_overlap_prediction(
|
|
950
1234
|
repo: str, issue: int, prediction: Prediction, applied: list[str],
|
|
951
1235
|
) -> None:
|
|
@@ -5248,12 +5532,25 @@ def _blocked_escalation_command(entry: QueueEntry | None, key: str, reason: str)
|
|
|
5248
5532
|
@click.option(
|
|
5249
5533
|
"--max-parallel",
|
|
5250
5534
|
type=int,
|
|
5251
|
-
default=
|
|
5252
|
-
show_default=True,
|
|
5535
|
+
default=None,
|
|
5253
5536
|
help=(
|
|
5254
|
-
"
|
|
5255
|
-
"session count, so a drive whose observer hit its
|
|
5256
|
-
"still occupies a slot."
|
|
5537
|
+
"Global concurrency ceiling. Capacity is counted from BOARD state, "
|
|
5538
|
+
"not from a session count, so a drive whose observer hit its "
|
|
5539
|
+
"deadline (#1660) still occupies a slot. Omit this flag to use "
|
|
5540
|
+
"pipeline.max_parallel from coordinator.yml (or, absent that, a "
|
|
5541
|
+
"derivation from the fleet's own shape — repo count times the "
|
|
5542
|
+
"resolved --max-parallel-per-repo, clamped to "
|
|
5543
|
+
"concurrency.max_workers, see coord.drive_queue."
|
|
5544
|
+
"default_max_parallel; falling back further, if the config itself "
|
|
5545
|
+
f"can't be read, to {DEFAULT_MAX_PARALLEL}, #3388) — passing it "
|
|
5546
|
+
"explicitly always wins over both. #3388: a hardcoded constant here "
|
|
5547
|
+
"(coord-drive-queue.service used to pin --max-parallel 4) silently "
|
|
5548
|
+
"starves every repo but the first couple once "
|
|
5549
|
+
"--max-parallel-per-repo can exceed 1 — prefer the config setting "
|
|
5550
|
+
"over a systemd drop-in for the same reason #2573 gives for "
|
|
5551
|
+
"--max-parallel-per-repo: a drop-in has to restate the packaged "
|
|
5552
|
+
"unit's whole ExecStart= to change just this flag, and that copy "
|
|
5553
|
+
"silently drifts from the packaged unit's other flags over time."
|
|
5257
5554
|
),
|
|
5258
5555
|
)
|
|
5259
5556
|
@click.option(
|
|
@@ -5301,7 +5598,7 @@ def _blocked_escalation_command(entry: QueueEntry | None, key: str, reason: str)
|
|
|
5301
5598
|
)
|
|
5302
5599
|
@_CONFIG_OPTION
|
|
5303
5600
|
def drive_queue_tick(
|
|
5304
|
-
max_parallel: int,
|
|
5601
|
+
max_parallel: int | None,
|
|
5305
5602
|
max_parallel_per_repo: int | None,
|
|
5306
5603
|
dry_run: bool,
|
|
5307
5604
|
reconcile_only: bool,
|
|
@@ -5338,6 +5635,20 @@ def drive_queue_tick(
|
|
|
5338
5635
|
reverted #2314's pinned-venv `ExecStart=` right back to a
|
|
5339
5636
|
worker-overwritable path as an unnoticed side effect).
|
|
5340
5637
|
|
|
5638
|
+
#3388: `--max-parallel` resolves the SAME way, one level up — the flag on
|
|
5639
|
+
THIS invocation, when given; else `pipeline.max_parallel` from
|
|
5640
|
+
`coordinator.yml`; else `coord.drive_queue.default_max_parallel`'s
|
|
5641
|
+
derivation from the fleet's own shape (repo count times the
|
|
5642
|
+
ALREADY-RESOLVED `--max-parallel-per-repo` above, clamped to
|
|
5643
|
+
`concurrency.max_workers`); else, only if the config itself could not be
|
|
5644
|
+
read at all, `coord.drive_queue.DEFAULT_MAX_PARALLEL` (1). A hardcoded
|
|
5645
|
+
`--max-parallel` on the deployed systemd unit is exactly the failure mode
|
|
5646
|
+
this closes: #2012 set it to the repo count when `--max-parallel-per-repo`
|
|
5647
|
+
always defaulted to 1, #2057 raised it once by hand for a fifth repo, and
|
|
5648
|
+
neither update survived #2573 letting the per-repo ceiling exceed 1 — two
|
|
5649
|
+
repos alone then reach a stale global ceiling and starve every other repo
|
|
5650
|
+
in the fleet, forever, however deep their own queues are.
|
|
5651
|
+
|
|
5341
5652
|
`--max-parallel 0` (or `--reconcile-only`, the readable spelling of the
|
|
5342
5653
|
same thing — #2110) reconciles every `running` entry against the board and
|
|
5343
5654
|
then stops: no capacity walk, no deferrals, no queue-level alert, no
|
|
@@ -5369,24 +5680,37 @@ def drive_queue_tick(
|
|
|
5369
5680
|
from coord.filelock import FileLock, LockBusy, drive_queue_lock_path # noqa: PLC0415
|
|
5370
5681
|
from coord.state import list_drive_queue, update_drive_queue_entry # noqa: PLC0415
|
|
5371
5682
|
|
|
5372
|
-
|
|
5373
|
-
|
|
5374
|
-
|
|
5375
|
-
|
|
5376
|
-
|
|
5683
|
+
# Loaded at most once, shared by both ceilings' config-default resolution
|
|
5684
|
+
# below (#3388's `max_parallel` derivation needs the same config
|
|
5685
|
+
# `max_parallel_per_repo` already reads, plus `repos`/`concurrency`) —
|
|
5686
|
+
# `None` on the documented fail-open path, same posture as every other
|
|
5687
|
+
# best-effort config read on this path (an unreadable config must never
|
|
5688
|
+
# abort the tick).
|
|
5689
|
+
_resolved_config: Config | None = None
|
|
5690
|
+
_config_load_attempted = False
|
|
5691
|
+
|
|
5692
|
+
def _config_for_defaults() -> Config | None:
|
|
5693
|
+
nonlocal _resolved_config, _config_load_attempted
|
|
5694
|
+
if not _config_load_attempted:
|
|
5695
|
+
_config_load_attempted = True
|
|
5696
|
+
try:
|
|
5697
|
+
from coord.commands._common import _load_config # noqa: PLC0415
|
|
5698
|
+
|
|
5699
|
+
_resolved_config = _load_config(config_path)
|
|
5700
|
+
except Exception: # noqa: BLE001 — an unreadable config must not abort the tick
|
|
5701
|
+
_resolved_config = None
|
|
5702
|
+
return _resolved_config
|
|
5377
5703
|
|
|
5378
5704
|
# #2573: an explicit `--max-parallel-per-repo` always wins; otherwise
|
|
5379
5705
|
# fall back to the fleet-wide `pipeline.max_parallel_per_repo` in
|
|
5380
5706
|
# coordinator.yml, and only then to the hardcoded default. Resolved
|
|
5381
|
-
# BEFORE
|
|
5382
|
-
#
|
|
5707
|
+
# BEFORE `--max-parallel` (#3388's derivation multiplies BY this
|
|
5708
|
+
# already-resolved value) and before validation below, so a bad value
|
|
5709
|
+
# from either source is caught the same way regardless of which one
|
|
5710
|
+
# supplied it.
|
|
5383
5711
|
if max_parallel_per_repo is None:
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
config_default = _load_config(config_path).pipeline.max_parallel_per_repo
|
|
5388
|
-
except Exception: # noqa: BLE001 — an unreadable config must not abort the tick
|
|
5389
|
-
config_default = None
|
|
5712
|
+
_cfg = _config_for_defaults()
|
|
5713
|
+
config_default = None if _cfg is None else _cfg.pipeline.max_parallel_per_repo
|
|
5390
5714
|
max_parallel_per_repo = (
|
|
5391
5715
|
DEFAULT_MAX_PARALLEL_PER_REPO if config_default is None else config_default
|
|
5392
5716
|
)
|
|
@@ -5396,6 +5720,35 @@ def drive_queue_tick(
|
|
|
5396
5720
|
"--max-parallel-per-repo must be 0 (no per-repo ceiling) or more"
|
|
5397
5721
|
)
|
|
5398
5722
|
|
|
5723
|
+
# #3388: an explicit `--max-parallel` always wins; otherwise
|
|
5724
|
+
# `pipeline.max_parallel` from coordinator.yml; otherwise derive it from
|
|
5725
|
+
# the fleet's own shape (repo count * the per-repo ceiling just resolved
|
|
5726
|
+
# above, clamped to the fleet's real worker capacity) rather than fall
|
|
5727
|
+
# back to a hand-maintained constant that goes stale the moment either
|
|
5728
|
+
# side changes — see `coord.drive_queue.default_max_parallel`. Only when
|
|
5729
|
+
# the config itself could not be read at all (so neither the fleet
|
|
5730
|
+
# default nor the fleet shape is known) does this fall back to the
|
|
5731
|
+
# hardcoded `DEFAULT_MAX_PARALLEL`.
|
|
5732
|
+
if max_parallel is None:
|
|
5733
|
+
_cfg = _config_for_defaults()
|
|
5734
|
+
config_max_parallel = None if _cfg is None else _cfg.pipeline.max_parallel
|
|
5735
|
+
if config_max_parallel is not None:
|
|
5736
|
+
max_parallel = config_max_parallel
|
|
5737
|
+
elif _cfg is not None:
|
|
5738
|
+
max_parallel = default_max_parallel(
|
|
5739
|
+
repo_count=len(_cfg.repos),
|
|
5740
|
+
max_parallel_per_repo=max_parallel_per_repo,
|
|
5741
|
+
max_workers_cap=_cfg.concurrency.max_workers,
|
|
5742
|
+
)
|
|
5743
|
+
else:
|
|
5744
|
+
max_parallel = DEFAULT_MAX_PARALLEL
|
|
5745
|
+
|
|
5746
|
+
if max_parallel < 0:
|
|
5747
|
+
raise click.ClickException(
|
|
5748
|
+
"--max-parallel must be at least 0 (0 = reconcile-only, launch "
|
|
5749
|
+
"nothing this run — see --reconcile-only)"
|
|
5750
|
+
)
|
|
5751
|
+
|
|
5399
5752
|
# #2110: `--reconcile-only` and `--max-parallel 0` are the same request —
|
|
5400
5753
|
# one flag is a mnemonic for the other rather than a second code path, so
|
|
5401
5754
|
# there is exactly one way this behaves, not two that could drift apart.
|
|
@@ -1232,6 +1232,21 @@ class PipelineConfig:
|
|
|
1232
1232
|
:data:`_DEFAULT_STALL_THRESHOLDS` for the shape and the evidence behind
|
|
1233
1233
|
its two seeded entries, and :meth:`stall_threshold_secs` for how a type
|
|
1234
1234
|
absent from the table falls back to the drive's flat ``--stall`` value.
|
|
1235
|
+
|
|
1236
|
+
``max_parallel`` (#3388) is the fleet-wide default for ``coord
|
|
1237
|
+
drive-queue tick``'s GLOBAL concurrency ceiling (``--max-parallel``) —
|
|
1238
|
+
the sibling of ``max_parallel_per_repo`` above, added for the same
|
|
1239
|
+
reason: a systemd unit's hardcoded ``--max-parallel 4`` encoded a fact
|
|
1240
|
+
about the fleet (repo count times per-repo ceiling) that nobody revisited
|
|
1241
|
+
when either side changed, and two repos alone starved the other twelve
|
|
1242
|
+
once ``max_parallel_per_repo`` could exceed 1 (#2012, #2057, #2573).
|
|
1243
|
+
``None`` (the default) leaves the ceiling at
|
|
1244
|
+
``coord.drive_queue.default_max_parallel``'s derivation — ``repo_count *
|
|
1245
|
+
max_parallel_per_repo``, clamped to ``concurrency.max_workers`` — rather
|
|
1246
|
+
than a hand-maintained constant. An explicit ``coord drive-queue tick
|
|
1247
|
+
--max-parallel N`` on the command line always wins over this, exactly
|
|
1248
|
+
mirroring ``max_parallel_per_repo``'s own resolution order — see
|
|
1249
|
+
``coord.commands.drive_queue.drive_queue_tick``.
|
|
1235
1250
|
"""
|
|
1236
1251
|
|
|
1237
1252
|
default_gates: list[str] = field(default_factory=lambda: ["test", "review", "merge"])
|
|
@@ -1267,6 +1282,9 @@ class PipelineConfig:
|
|
|
1267
1282
|
stall_thresholds: dict[str, float] = field(
|
|
1268
1283
|
default_factory=lambda: dict(_DEFAULT_STALL_THRESHOLDS)
|
|
1269
1284
|
)
|
|
1285
|
+
# #3388 — None means "derive from the fleet shape", see
|
|
1286
|
+
# coord.drive_queue.default_max_parallel. See the class docstring.
|
|
1287
|
+
max_parallel: int | None = None
|
|
1270
1288
|
|
|
1271
1289
|
def attention_threshold_for(
|
|
1272
1290
|
self,
|
|
@@ -3641,6 +3659,17 @@ def _parse_pipeline(raw: Any) -> PipelineConfig:
|
|
|
3641
3659
|
)
|
|
3642
3660
|
cfg.max_parallel_per_repo = value
|
|
3643
3661
|
|
|
3662
|
+
if "max_parallel" in raw:
|
|
3663
|
+
value = raw["max_parallel"]
|
|
3664
|
+
if value is not None and (
|
|
3665
|
+
not isinstance(value, int) or isinstance(value, bool) or value < 0
|
|
3666
|
+
):
|
|
3667
|
+
raise ConfigError(
|
|
3668
|
+
"pipeline.max_parallel must be a non-negative integer or "
|
|
3669
|
+
"null (0 = reconcile-only, launch nothing)"
|
|
3670
|
+
)
|
|
3671
|
+
cfg.max_parallel = value
|
|
3672
|
+
|
|
3644
3673
|
if "stall_thresholds" in raw:
|
|
3645
3674
|
value = raw["stall_thresholds"]
|
|
3646
3675
|
if not isinstance(value, dict):
|