code-coordinator 0.5.583__tar.gz → 0.5.585__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.583 → code_coordinator-0.5.585}/PKG-INFO +1 -1
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/_common.py +38 -18
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/config.py +33 -10
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/drive.py +174 -20
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/usage_rollup.py +33 -13
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive.py +108 -2
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_usage.py +38 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_usage_rollup.py +68 -1
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/.gitignore +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/CLAUDE.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/GOAL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/LICENSE +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/MANIFEST.in +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/README.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/__init__.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/agent.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/audit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/backup.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/block_log.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/board_service.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/brain.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/claim.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/cli.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/client.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/codegen.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/comments.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dao.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/db.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/deps.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/events.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/filelock.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/freshness.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/gates.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/goal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/context.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/models.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/render.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/health/units.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/hooks.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/interactive.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/models.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/network.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/notify.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/openapi.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/parentage.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/plans.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/progress.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/release_window.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/reports.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/review.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/self_health.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/smoke.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/split_work.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/sql.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/state.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/test_author.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/test_report.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/usage.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/install-agent.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/pyproject.toml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/setup.cfg +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/__init__.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/backends.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/conftest.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_client.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_config.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_db.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_events.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_init.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_merge_verification.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_models.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_network.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_review.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_session.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_split.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_state.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.583 → code_coordinator-0.5.585}/tests/write_parity.py +0 -0
|
@@ -330,7 +330,23 @@ def _save_config_snapshot(
|
|
|
330
330
|
pass
|
|
331
331
|
|
|
332
332
|
|
|
333
|
-
def
|
|
333
|
+
def resolve_and_load_config(path: Path | None, *, allow_thin_client: bool = True) -> Config:
|
|
334
|
+
"""Resolve *path* (thin-client aware) and parse it — the one place this
|
|
335
|
+
question is asked, so every caller that needs a *freshly loaded* config
|
|
336
|
+
(not just the one-time CLI boot in :func:`_load_config`, which also
|
|
337
|
+
writes the DB snapshot and exits the process on a parse failure) gets
|
|
338
|
+
the SAME resolution rule rather than a second, drifting copy (#2096,
|
|
339
|
+
"one question, one answer"). :func:`coord.drive.Driver`'s per-poll
|
|
340
|
+
config reload (#1654) is the other caller: unlike `_load_config`, it
|
|
341
|
+
must never call ``sys.exit`` (a bad mid-run edit must warn, not kill the
|
|
342
|
+
drive) and must never re-run ``_save_config_snapshot`` every poll (a
|
|
343
|
+
DELETE+INSERT into the shared ``machines`` table, meant for "this
|
|
344
|
+
process just booted", not "it's still running 50 polls later").
|
|
345
|
+
|
|
346
|
+
Raises :class:`ConfigError` on any resolution/parse failure — never
|
|
347
|
+
exits, never echoes. Callers that want the CLI's print-and-exit-2
|
|
348
|
+
behavior still go through :func:`_load_config`.
|
|
349
|
+
"""
|
|
334
350
|
# Resolve the default location ($COORD_CONFIG → ~/.coord/coordinator.yml →
|
|
335
351
|
# ./coordinator.yml) when no explicit --config was given, so `coord` works on
|
|
336
352
|
# a machine without a repo checkout and isn't sensitive to the CWD.
|
|
@@ -366,24 +382,28 @@ def _load_config(path: Path | None, *, allow_thin_client: bool = True) -> Config
|
|
|
366
382
|
# caller of ``_load_config`` legitimately wants thin-client resolution
|
|
367
383
|
# (they ARE clients of the daemon's board) — this flag exists so ONLY
|
|
368
384
|
# `coord serve`'s own bootstrap can opt out.
|
|
385
|
+
if allow_thin_client:
|
|
386
|
+
from coord.client import resolve_board_service # noqa: PLC0415
|
|
387
|
+
|
|
388
|
+
svc = resolve_board_service()
|
|
389
|
+
if svc is not None:
|
|
390
|
+
from coord.client import fetch_remote_config # noqa: PLC0415
|
|
391
|
+
|
|
392
|
+
try:
|
|
393
|
+
path = fetch_remote_config(svc)
|
|
394
|
+
except Exception as exc: # noqa: BLE001 — do NOT fall through to
|
|
395
|
+
# load(path): path may point at a local file that happens to
|
|
396
|
+
# exist (the exact bypass this issue closes). Fail loudly
|
|
397
|
+
# instead of silently trusting whatever is on disk.
|
|
398
|
+
raise ConfigError(
|
|
399
|
+
f"could not fetch config from {svc.url}: {exc}"
|
|
400
|
+
) from exc
|
|
401
|
+
return load(path)
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
def _load_config(path: Path | None, *, allow_thin_client: bool = True) -> Config:
|
|
369
405
|
try:
|
|
370
|
-
|
|
371
|
-
from coord.client import resolve_board_service # noqa: PLC0415
|
|
372
|
-
|
|
373
|
-
svc = resolve_board_service()
|
|
374
|
-
if svc is not None:
|
|
375
|
-
from coord.client import fetch_remote_config # noqa: PLC0415
|
|
376
|
-
|
|
377
|
-
try:
|
|
378
|
-
path = fetch_remote_config(svc)
|
|
379
|
-
except Exception as exc: # noqa: BLE001 — do NOT fall through to
|
|
380
|
-
# load(path): path may point at a local file that happens to
|
|
381
|
-
# exist (the exact bypass this issue closes). Fail loudly
|
|
382
|
-
# instead of silently trusting whatever is on disk.
|
|
383
|
-
raise ConfigError(
|
|
384
|
-
f"could not fetch config from {svc.url}: {exc}"
|
|
385
|
-
) from exc
|
|
386
|
-
cfg = load(path)
|
|
406
|
+
cfg = resolve_and_load_config(path, allow_thin_client=allow_thin_client)
|
|
387
407
|
except ConfigError as e:
|
|
388
408
|
click.echo(f"error: {e}", err=True)
|
|
389
409
|
sys.exit(2)
|
|
@@ -1933,21 +1933,44 @@ def _default_pricing() -> dict[str, ModelRates]:
|
|
|
1933
1933
|
|
|
1934
1934
|
@dataclass
|
|
1935
1935
|
class PricingConfig:
|
|
1936
|
-
"""``pricing:`` block (#1118) — per-
|
|
1937
|
-
|
|
1938
|
-
``models`` maps a
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1936
|
+
"""``pricing:`` block (#1118) — per-1M-token USD rates, keyed by model.
|
|
1937
|
+
|
|
1938
|
+
``models`` maps a pricing key to its :class:`ModelRates`. The key shape
|
|
1939
|
+
is whatever :func:`coord.usage_rollup.normalize_model` resolves a leg's
|
|
1940
|
+
raw ``model`` field to, and there are exactly two cases (#1651):
|
|
1941
|
+
|
|
1942
|
+
- One of the four built-in Anthropic tiers — ``"sonnet"``, ``"opus"``,
|
|
1943
|
+
``"haiku"``, ``"fable"`` — which ``normalize_model`` also maps every
|
|
1944
|
+
versioned id of (e.g. ``"claude-sonnet-4-6"``) onto.
|
|
1945
|
+
- Any other model's **own route key, spelled exactly as the route that
|
|
1946
|
+
dispatches it identifies it** — e.g. the escalation ladder's (#55)
|
|
1947
|
+
OpenCode Zen ``provider/model`` strings, ``"opencode/glm-5.2"`` or
|
|
1948
|
+
``"deepseek/deepseek-chat"`` (see ``ProviderDef.model`` /
|
|
1949
|
+
``coord.config.model_plausible_for_provider_type``). There is
|
|
1950
|
+
deliberately only ONE spelling of a given non-Anthropic model across
|
|
1951
|
+
this config — the same string ``coordinator.yml``'s ``providers:`` /
|
|
1952
|
+
``models.labels``/``escalation`` already uses to route to it — rather
|
|
1953
|
+
than a second "pricing alias" that could drift out of sync with the
|
|
1954
|
+
routing key.
|
|
1955
|
+
|
|
1956
|
+
An absent ``pricing:`` block in coordinator.yml still yields the
|
|
1957
|
+
built-in Anthropic defaults via :func:`_default_pricing`; a
|
|
1958
|
+
non-Anthropic key is simply absent until an operator adds it. A model
|
|
1959
|
+
key with no entry here (e.g. ``"(unknown)"``, a genuinely unrecognized
|
|
1960
|
+
model string, or a real but un-configured route key) has no rate —
|
|
1961
|
+
:mod:`coord.usage_rollup` treats that as "no estimate possible" and
|
|
1962
|
+
flags the leg/group as unknown rather than silently reporting $0.
|
|
1945
1963
|
"""
|
|
1946
1964
|
|
|
1947
1965
|
models: dict[str, ModelRates] = field(default_factory=_default_pricing)
|
|
1948
1966
|
|
|
1949
1967
|
def rates_for(self, canonical_model: str) -> ModelRates | None:
|
|
1950
|
-
"""Look up rates for a
|
|
1968
|
+
"""Look up rates for a pricing key, or ``None`` if unpriced.
|
|
1969
|
+
|
|
1970
|
+
*canonical_model* is whatever :func:`coord.usage_rollup.
|
|
1971
|
+
normalize_model` returned — a built-in Anthropic tier name, or a
|
|
1972
|
+
passed-through non-Anthropic route key (see the class docstring).
|
|
1973
|
+
"""
|
|
1951
1974
|
return self.models.get(canonical_model)
|
|
1952
1975
|
|
|
1953
1976
|
|
|
@@ -384,6 +384,33 @@ def _current_self_head() -> str | None:
|
|
|
384
384
|
return self_freshness(fetch=False).head_sha
|
|
385
385
|
|
|
386
386
|
|
|
387
|
+
def _load_config_for_drive(config_path: str) -> Any:
|
|
388
|
+
"""Real default for `Driver.config_loader` (#1654): re-read
|
|
389
|
+
coordinator.yml fresh — ``config_path`` empty resolves the usual
|
|
390
|
+
``$COORD_CONFIG`` → ``~/.coord/coordinator.yml`` → ``./coordinator.yml``
|
|
391
|
+
chain, AND the thin-client (board_service) redirect, exactly like the
|
|
392
|
+
construction-time load in ``coord.commands._common._load_config`` —
|
|
393
|
+
calls the SAME ``resolve_and_load_config`` helper that function now
|
|
394
|
+
wraps, so a mid-run reload can never resolve a *different* file (or
|
|
395
|
+
skip the thin-client branch an ordinary client is expected to take)
|
|
396
|
+
than the one this drive started with (#2096, "one question, one
|
|
397
|
+
answer"). Deliberately NOT ``_load_config`` itself: that one also
|
|
398
|
+
``sys.exit``s on a parse failure (a bad mid-run edit must warn, never
|
|
399
|
+
kill the drive — see ``Driver._reload_config``) and re-writes the
|
|
400
|
+
shared ``machines`` DB snapshot (meant for a one-time boot, not every
|
|
401
|
+
poll).
|
|
402
|
+
|
|
403
|
+
Imported lazily: ``coord.commands._common`` pulls in ``click``/
|
|
404
|
+
``httpx``, and every pure decision function in this module already
|
|
405
|
+
takes an already-loaded config rather than touching disk itself — this
|
|
406
|
+
keeps that true for every caller except the one that's explicitly an
|
|
407
|
+
I/O shell.
|
|
408
|
+
"""
|
|
409
|
+
from coord.commands._common import resolve_and_load_config # noqa: PLC0415
|
|
410
|
+
|
|
411
|
+
return resolve_and_load_config(Path(config_path) if config_path else None)
|
|
412
|
+
|
|
413
|
+
|
|
387
414
|
def _bounded_tail(text: str, limit: int = _CAPTURED_OUTPUT_LIMIT) -> str:
|
|
388
415
|
"""*text*, or its last *limit* characters if longer — the tail, because
|
|
389
416
|
the actionable line (a traceback's final "raise ...", a guard's remedy)
|
|
@@ -2111,6 +2138,39 @@ class Preflight:
|
|
|
2111
2138
|
warnings: tuple[str, ...] = ()
|
|
2112
2139
|
|
|
2113
2140
|
|
|
2141
|
+
def check_usage_gate(
|
|
2142
|
+
config: Any, usage_limits: PlanLimits | None,
|
|
2143
|
+
) -> str | None:
|
|
2144
|
+
"""Evaluate the usage gate — raise on ``block``, return a warn message
|
|
2145
|
+
on ``warn``, ``None`` otherwise.
|
|
2146
|
+
|
|
2147
|
+
#1654: the SOLE place this question is asked, so :func:`preflight`'s
|
|
2148
|
+
one-time call at the top of a run and :meth:`Driver._loop`'s per-poll
|
|
2149
|
+
re-check (added for #1654, since the gate's own ``mode``/thresholds can
|
|
2150
|
+
change mid-run) can never drift into two different answers for the
|
|
2151
|
+
same inputs (#2096, "one question, one answer").
|
|
2152
|
+
|
|
2153
|
+
*config* of ``None`` skips the gate entirely (no ``usage_gate`` section
|
|
2154
|
+
to consult) — mirrors every pre-#1466 caller.
|
|
2155
|
+
"""
|
|
2156
|
+
if config is None:
|
|
2157
|
+
return None
|
|
2158
|
+
gate_cfg = config.usage_gate
|
|
2159
|
+
limits = usage_limits if usage_limits is not None else PlanLimits(status="unknown")
|
|
2160
|
+
gate_result = evaluate_usage_gate(limits, gate_cfg)
|
|
2161
|
+
if gate_result.action == "block":
|
|
2162
|
+
raise DriveError(
|
|
2163
|
+
f"{gate_result.message} (usage_gate.mode: block) — refusing to "
|
|
2164
|
+
"dispatch. Wait for the window to reset, or lower urgency by "
|
|
2165
|
+
"raising the threshold / setting usage_gate.mode: warn in "
|
|
2166
|
+
"coordinator.yml.",
|
|
2167
|
+
EXIT_USAGE,
|
|
2168
|
+
)
|
|
2169
|
+
if gate_result.action == "warn":
|
|
2170
|
+
return f"{gate_result.message} (usage_gate.mode: warn — proceeding anyway)"
|
|
2171
|
+
return None
|
|
2172
|
+
|
|
2173
|
+
|
|
2114
2174
|
def preflight(
|
|
2115
2175
|
state: IssueState,
|
|
2116
2176
|
opts: DriveOptions,
|
|
@@ -2165,20 +2225,9 @@ def preflight(
|
|
|
2165
2225
|
|
|
2166
2226
|
warnings: list[str] = []
|
|
2167
2227
|
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
gate_result = evaluate_usage_gate(limits, gate_cfg)
|
|
2172
|
-
if gate_result.action == "block":
|
|
2173
|
-
raise DriveError(
|
|
2174
|
-
f"{gate_result.message} (usage_gate.mode: block) — refusing to "
|
|
2175
|
-
"dispatch. Wait for the window to reset, or lower urgency by "
|
|
2176
|
-
"raising the threshold / setting usage_gate.mode: warn in "
|
|
2177
|
-
"coordinator.yml.",
|
|
2178
|
-
EXIT_USAGE,
|
|
2179
|
-
)
|
|
2180
|
-
if gate_result.action == "warn":
|
|
2181
|
-
warnings.append(f"{gate_result.message} (usage_gate.mode: warn — proceeding anyway)")
|
|
2228
|
+
gate_warning = check_usage_gate(config, usage_limits)
|
|
2229
|
+
if gate_warning:
|
|
2230
|
+
warnings.append(gate_warning)
|
|
2182
2231
|
|
|
2183
2232
|
if not state.auto_loop:
|
|
2184
2233
|
warnings.append(
|
|
@@ -5399,6 +5448,13 @@ class Driver:
|
|
|
5399
5448
|
# without a real git checkout — same shape as *usage_prober* above.
|
|
5400
5449
|
# Defaults to the real, local-only (`fetch=False`) probe.
|
|
5401
5450
|
self_head_probe: Callable[[], str | None] = _current_self_head
|
|
5451
|
+
# #1654: injected so tests can script a fake coordinator.yml reload
|
|
5452
|
+
# sequence without real YAML I/O — same injection shape as
|
|
5453
|
+
# *usage_prober*/*self_head_probe* above. Defaults to the real loader,
|
|
5454
|
+
# re-reading ``self.opts.config_path`` (empty string resolves the usual
|
|
5455
|
+
# ``$COORD_CONFIG`` → ``~/.coord/coordinator.yml`` → ``./coordinator.yml``
|
|
5456
|
+
# chain) fresh every call — see ``_reload_config``.
|
|
5457
|
+
config_loader: Callable[[str], Any] = _load_config_for_drive
|
|
5402
5458
|
|
|
5403
5459
|
_run_log: Path | None = field(default=None, init=False, repr=False)
|
|
5404
5460
|
# #2443: this session's own on-disk `coord` HEAD, captured once by
|
|
@@ -5426,6 +5482,17 @@ class Driver:
|
|
|
5426
5482
|
# call, so it is only ever trustworthy read immediately after one, which
|
|
5427
5483
|
# is exactly how `_loop` uses it.
|
|
5428
5484
|
_last_run_output: str = field(default="", init=False, repr=False)
|
|
5485
|
+
# #1654: latches so a coordinator.yml that fails to parse mid-run (an
|
|
5486
|
+
# operator mid-edit, a truncated write) warns ONCE for the whole broken
|
|
5487
|
+
# window, not once per poll — `_reload_config` sets this on a failed
|
|
5488
|
+
# reload and clears it (with a short recovery log line) the first time a
|
|
5489
|
+
# reload succeeds again.
|
|
5490
|
+
_config_reload_broken: bool = field(default=False, init=False, repr=False)
|
|
5491
|
+
# #1654: the last usage-gate WARN message this run already printed, so a
|
|
5492
|
+
# `mode: warn` config that stays warn-worthy across many polls (the
|
|
5493
|
+
# common case — the usage window doesn't reset every poll) logs once per
|
|
5494
|
+
# DISTINCT message rather than spamming the identical line every tick.
|
|
5495
|
+
_last_usage_gate_warning: str | None = field(default=None, init=False, repr=False)
|
|
5429
5496
|
|
|
5430
5497
|
def __post_init__(self) -> None:
|
|
5431
5498
|
self.out = self.out or sys.stdout
|
|
@@ -5473,6 +5540,68 @@ class Driver:
|
|
|
5473
5540
|
except DriveStateError as exc:
|
|
5474
5541
|
raise DriveError(str(exc), EXIT_USAGE) from exc
|
|
5475
5542
|
|
|
5543
|
+
def _reload_config(self) -> None:
|
|
5544
|
+
"""Re-read coordinator.yml at the top of every poll (#1654).
|
|
5545
|
+
|
|
5546
|
+
`self.config` used to be a pure construction-time snapshot the poll
|
|
5547
|
+
loop never revisited — a ladder/usage-gate edit made while a drive
|
|
5548
|
+
was already running had no effect until the NEXT invocation, which
|
|
5549
|
+
is exactly backwards for a lever (#1649's reroute mode, a tightened
|
|
5550
|
+
threshold) most likely to be flipped reactively, mid-window, because
|
|
5551
|
+
a drive is already running and burning credits. Cheap: one YAML
|
|
5552
|
+
parse against a loop that already shells out to a `coord`
|
|
5553
|
+
subprocess (`run_coord`) every tick.
|
|
5554
|
+
|
|
5555
|
+
A config that fails to parse (an operator mid-edit, a truncated
|
|
5556
|
+
write) must never kill an otherwise-healthy run: this keeps the
|
|
5557
|
+
last-good `self.config` and only warns — exactly ONCE for the whole
|
|
5558
|
+
broken window (`_config_reload_broken` latches it), not once per
|
|
5559
|
+
poll. `self.opts` (this invocation's own identity — the CLI flags)
|
|
5560
|
+
is never touched here; only `self.config` is replaced.
|
|
5561
|
+
"""
|
|
5562
|
+
try:
|
|
5563
|
+
new_config = self.config_loader(self.opts.config_path)
|
|
5564
|
+
except Exception as exc: # noqa: BLE001 — a bad edit must never kill the drive
|
|
5565
|
+
if not self._config_reload_broken:
|
|
5566
|
+
self.warn(
|
|
5567
|
+
"coordinator.yml reload failed, keeping the last-known-"
|
|
5568
|
+
f"good config: {exc}"
|
|
5569
|
+
)
|
|
5570
|
+
self._config_reload_broken = True
|
|
5571
|
+
return
|
|
5572
|
+
if self._config_reload_broken:
|
|
5573
|
+
self.log(
|
|
5574
|
+
"coordinator.yml reload recovered — back to a fresh config"
|
|
5575
|
+
)
|
|
5576
|
+
self._config_reload_broken = False
|
|
5577
|
+
self._log_config_change(self.config, new_config)
|
|
5578
|
+
self.config = new_config
|
|
5579
|
+
|
|
5580
|
+
def _log_config_change(self, old: Any, new: Any) -> None:
|
|
5581
|
+
"""Narrate a reload that changes a decision this loop actually makes
|
|
5582
|
+
(#1654), so a mid-run behaviour change is explicable from this run's
|
|
5583
|
+
own log afterwards rather than looking like nondeterminism.
|
|
5584
|
+
|
|
5585
|
+
Deliberately narrow — only the usage gate, the one knob this loop
|
|
5586
|
+
re-consults every poll (see `check_usage_gate` below) — rather than
|
|
5587
|
+
a full recursive diff of the whole `Config` object, which would be
|
|
5588
|
+
noisy (most fields are per-repo/machine topology this driver never
|
|
5589
|
+
reads for THIS issue) and risks echoing a secret accidentally pasted
|
|
5590
|
+
into coordinator.yml into this run's log.
|
|
5591
|
+
"""
|
|
5592
|
+
old_gate, new_gate = old.usage_gate, new.usage_gate
|
|
5593
|
+
old_shape = (old_gate.mode, old_gate.session_threshold_pct, old_gate.week_threshold_pct)
|
|
5594
|
+
new_shape = (new_gate.mode, new_gate.session_threshold_pct, new_gate.week_threshold_pct)
|
|
5595
|
+
if old_shape != new_shape:
|
|
5596
|
+
self.log(
|
|
5597
|
+
"coordinator.yml reload: usage_gate changed "
|
|
5598
|
+
f"mode {old_gate.mode!r} -> {new_gate.mode!r}, "
|
|
5599
|
+
f"session_threshold_pct {old_gate.session_threshold_pct!r} -> "
|
|
5600
|
+
f"{new_gate.session_threshold_pct!r}, week_threshold_pct "
|
|
5601
|
+
f"{old_gate.week_threshold_pct!r} -> {new_gate.week_threshold_pct!r} "
|
|
5602
|
+
"— this run's next dispatch decision reflects the new config."
|
|
5603
|
+
)
|
|
5604
|
+
|
|
5476
5605
|
# ── execution ───────────────────────────────────────────────────────
|
|
5477
5606
|
def run_coord(self, args: tuple[str, ...], *, serialize_merge: bool = False) -> int:
|
|
5478
5607
|
"""Run a ``coord`` subcommand, echoing its output and appending to the log.
|
|
@@ -5751,12 +5880,15 @@ class Driver:
|
|
|
5751
5880
|
if state is None:
|
|
5752
5881
|
raise DriveError("could not read board state", EXIT_USAGE)
|
|
5753
5882
|
|
|
5754
|
-
# #1466:
|
|
5755
|
-
#
|
|
5756
|
-
#
|
|
5757
|
-
#
|
|
5758
|
-
#
|
|
5759
|
-
#
|
|
5883
|
+
# #1466: this is the ONE-TIME preflight check — raises/warns before
|
|
5884
|
+
# the loop below ever starts, using whatever config this run was
|
|
5885
|
+
# launched with. #1654 added a SECOND, per-poll re-check
|
|
5886
|
+
# (`check_usage_gate`, called again right before every RUN action
|
|
5887
|
+
# below) against `self.config` AS RELOADED THAT TICK, so a mid-run
|
|
5888
|
+
# `usage_gate.mode`/threshold edit reaches the very next dispatch —
|
|
5889
|
+
# this first call only ever decides whether the run gets to start at
|
|
5890
|
+
# all. Skipped entirely when the gate is off, so a `disabled`
|
|
5891
|
+
# config never pays the subprocess cost.
|
|
5760
5892
|
usage_limits = (
|
|
5761
5893
|
self.usage_prober() if self.config.usage_gate.mode != "disabled" else None
|
|
5762
5894
|
)
|
|
@@ -5876,6 +6008,12 @@ class Driver:
|
|
|
5876
6008
|
)
|
|
5877
6009
|
return EXIT_DEADLINE
|
|
5878
6010
|
|
|
6011
|
+
# #1654: re-read coordinator.yml before every decision this tick
|
|
6012
|
+
# makes — see `_reload_config`'s own docstring for why (a
|
|
6013
|
+
# construction-time snapshot made a mid-run ladder/usage-gate
|
|
6014
|
+
# edit invisible for the drive's entire remaining life).
|
|
6015
|
+
self._reload_config()
|
|
6016
|
+
|
|
5879
6017
|
state = self.read_state()
|
|
5880
6018
|
if state is None:
|
|
5881
6019
|
self.sleeper(self.opts.poll)
|
|
@@ -6076,6 +6214,22 @@ class Driver:
|
|
|
6076
6214
|
self.log(action.label)
|
|
6077
6215
|
|
|
6078
6216
|
if action.kind == RUN:
|
|
6217
|
+
# #1654: re-check the usage gate against THIS poll's
|
|
6218
|
+
# (possibly just-reloaded) config, not the snapshot
|
|
6219
|
+
# `preflight()` consulted once before the loop started —
|
|
6220
|
+
# `check_usage_gate` is the SAME question preflight asks, so
|
|
6221
|
+
# a mid-run `usage_gate.mode` edit (warn -> block, or a
|
|
6222
|
+
# tightened threshold) reaches the very next dispatch
|
|
6223
|
+
# instead of only the next `coord drive` invocation.
|
|
6224
|
+
usage_limits = (
|
|
6225
|
+
self.usage_prober()
|
|
6226
|
+
if self.config.usage_gate.mode != "disabled"
|
|
6227
|
+
else None
|
|
6228
|
+
)
|
|
6229
|
+
gate_warning = check_usage_gate(self.config, usage_limits)
|
|
6230
|
+
if gate_warning and gate_warning != self._last_usage_gate_warning:
|
|
6231
|
+
self.warn(gate_warning)
|
|
6232
|
+
self._last_usage_gate_warning = gate_warning
|
|
6079
6233
|
rc = self.run_coord(
|
|
6080
6234
|
action.command, serialize_merge=action.serialize_merge
|
|
6081
6235
|
)
|
|
@@ -46,24 +46,42 @@ from coord.config import ModelRates, PricingConfig
|
|
|
46
46
|
|
|
47
47
|
# ── Model normalization ──────────────────────────────────────────────────────
|
|
48
48
|
|
|
49
|
-
# Canonical keys this module recognizes out of the box
|
|
50
|
-
#
|
|
49
|
+
# Canonical keys this module recognizes out of the box (the four Anthropic
|
|
50
|
+
# tiers). Anything else PASSES THROUGH verbatim (lowercased/stripped) rather
|
|
51
|
+
# than collapsing to "(unknown)" — see #1651: once the escalation ladder
|
|
52
|
+
# (#55) routes to a non-Anthropic model, its board `model` field is whatever
|
|
53
|
+
# key that route identifies itself by (e.g. the OpenCode Zen `provider/model`
|
|
54
|
+
# shape, `"opencode/glm-5.2"`, `"deepseek/deepseek-chat"` — see
|
|
55
|
+
# `coord.config.model_plausible_for_provider_type`). A `pricing.models` entry
|
|
56
|
+
# keyed with that EXACT string (same spelling as the route/`ProviderDef.model`
|
|
57
|
+
# that produced it — there is deliberately only one spelling, never a second
|
|
58
|
+
# "friendly" alias to keep in sync) now reaches `PricingConfig.rates_for`
|
|
59
|
+
# instead of being shadowed by a hardcoded "(unknown)". A key with no such
|
|
60
|
+
# entry still resolves to no rate (`rates_for` returns `None`) and is flagged
|
|
61
|
+
# unknown exactly as before — nothing is ever *guessed* into a tier.
|
|
51
62
|
_KNOWN_CANONICAL = ("sonnet", "opus", "haiku", "fable")
|
|
52
63
|
|
|
53
64
|
UNKNOWN_MODEL = "(unknown)"
|
|
54
65
|
|
|
55
66
|
|
|
56
67
|
def normalize_model(model: str | None) -> str:
|
|
57
|
-
"""Normalize a raw ``model`` field to a
|
|
68
|
+
"""Normalize a raw ``model`` field to a pricing key.
|
|
58
69
|
|
|
59
|
-
Handles bare aliases (``"sonnet"``, ``"opus"``, ``"haiku"``,
|
|
60
|
-
versioned ids (``"claude-sonnet-4-6"``, ``"claude-opus-4-7"``,
|
|
70
|
+
Handles bare Anthropic aliases (``"sonnet"``, ``"opus"``, ``"haiku"``,
|
|
71
|
+
``"fable"``), versioned ids (``"claude-sonnet-4-6"``, ``"claude-opus-4-7"``,
|
|
61
72
|
``"claude-haiku-4-5"``, ``"claude-fable-5"``, and future dated variants —
|
|
62
73
|
matched by substring so a new date suffix doesn't need a code change),
|
|
63
|
-
and the empty/``None``/``"(unknown)"`` cases
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
74
|
+
and the empty/``None``/``"(unknown)"`` cases, which all map to
|
|
75
|
+
``"(unknown)"``.
|
|
76
|
+
|
|
77
|
+
Anything else — notably a non-Anthropic route key from the escalation
|
|
78
|
+
ladder (#55), e.g. ``"opencode/glm-5.2"`` — is returned **unchanged**
|
|
79
|
+
(just lowercased/stripped) rather than forced to ``"(unknown)"``. That
|
|
80
|
+
passthrough is what lets :meth:`coord.config.PricingConfig.rates_for`
|
|
81
|
+
see the model's own key and find an operator-configured rate for it
|
|
82
|
+
(#1651); a key nobody configured still produces no rate there (``None``)
|
|
83
|
+
and the estimator flags it unknown exactly as before — this function
|
|
84
|
+
never *guesses* a tier for an unrecognized string.
|
|
67
85
|
"""
|
|
68
86
|
if not model:
|
|
69
87
|
return UNKNOWN_MODEL
|
|
@@ -75,7 +93,7 @@ def normalize_model(model: str | None) -> str:
|
|
|
75
93
|
for canonical in _KNOWN_CANONICAL:
|
|
76
94
|
if canonical in text:
|
|
77
95
|
return canonical
|
|
78
|
-
return
|
|
96
|
+
return text
|
|
79
97
|
|
|
80
98
|
|
|
81
99
|
# ── Timestamp parsing ─────────────────────────────────────────────────────────
|
|
@@ -232,9 +250,11 @@ def leg_cost(row: dict, pricing: PricingConfig) -> tuple[float, float, bool]:
|
|
|
232
250
|
verbatim as ``cost_captured`` and never also gets an estimate (no
|
|
233
251
|
double-counting). A leg with ``cost_usd`` in ``{None, 0}`` **and** any
|
|
234
252
|
tokens gets an estimate from *pricing*, keyed by the leg's normalized
|
|
235
|
-
model
|
|
236
|
-
|
|
237
|
-
|
|
253
|
+
model (see :func:`normalize_model` — a canonical Anthropic tier, or a
|
|
254
|
+
non-Anthropic model's own route key, e.g. ``"opencode/glm-5.2"``) —
|
|
255
|
+
unless *pricing* has no rate for that key, in which case no estimate is
|
|
256
|
+
produced and ``unknown_model`` is ``True`` (never a silent $0). A leg
|
|
257
|
+
with no tokens and no captured cost is simply zero everywhere.
|
|
238
258
|
"""
|
|
239
259
|
raw_cost = row.get("cost_usd")
|
|
240
260
|
try:
|
|
@@ -428,6 +428,102 @@ def test_driver_loop_disabled_gate_never_calls_the_prober(driver_factory):
|
|
|
428
428
|
assert calls == []
|
|
429
429
|
|
|
430
430
|
|
|
431
|
+
# ── #1654: the poll loop re-reads coordinator.yml every tick ───────────────
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
def test_driver_loop_picks_up_a_mid_run_usage_gate_change_on_the_next_poll(
|
|
435
|
+
driver_factory, capsys,
|
|
436
|
+
):
|
|
437
|
+
"""A `usage_gate.mode` edit made WHILE a drive is already polling must
|
|
438
|
+
reach the very next dispatch decision, not just the next `coord drive`
|
|
439
|
+
invocation (#1654's motivating #1653 scenario). Scripts a config_loader
|
|
440
|
+
that hands back the construction-time (`warn`) config on the first
|
|
441
|
+
reload and a `block`-mode config on every reload after — exactly like
|
|
442
|
+
an operator editing coordinator.yml between two polls."""
|
|
443
|
+
cfg_warn = _config_with_gate(mode="warn", session_threshold_pct=50.0)
|
|
444
|
+
cfg_block = _config_with_gate(mode="block", session_threshold_pct=50.0)
|
|
445
|
+
reloads = [cfg_warn, cfg_block]
|
|
446
|
+
calls = {"n": 0}
|
|
447
|
+
|
|
448
|
+
def loader(_path):
|
|
449
|
+
idx = min(calls["n"], len(reloads) - 1)
|
|
450
|
+
calls["n"] += 1
|
|
451
|
+
return reloads[idx]
|
|
452
|
+
|
|
453
|
+
driver = driver_factory(
|
|
454
|
+
[{"assignments": []}],
|
|
455
|
+
opts=DriveOptions(machine="precision", poll=1.0, deadline_mins=10.0),
|
|
456
|
+
config=cfg_warn,
|
|
457
|
+
usage_prober=lambda: PlanLimits(status="ok", session_pct=95.0),
|
|
458
|
+
config_loader=loader,
|
|
459
|
+
)
|
|
460
|
+
with pytest.raises(DriveError) as exc:
|
|
461
|
+
driver.run()
|
|
462
|
+
assert exc.value.exit_code == EXIT_USAGE
|
|
463
|
+
assert "block" in str(exc.value)
|
|
464
|
+
# Exactly one `coord assign` reached the subprocess boundary — the FIRST
|
|
465
|
+
# poll's reload still saw `warn` (construction-time config, unchanged),
|
|
466
|
+
# so it dispatched; the SECOND poll's reload already saw `block`, so the
|
|
467
|
+
# usage gate refused before a second `coord assign` was ever spawned.
|
|
468
|
+
assert len(driver.recorded) == 1
|
|
469
|
+
captured = capsys.readouterr()
|
|
470
|
+
# The reload's own narration is informational (`self.log`, not
|
|
471
|
+
# `self.warn`) — it goes to stdout, distinct from the usage gate's own
|
|
472
|
+
# warn-level lines on stderr asserted above via `exc.value`.
|
|
473
|
+
assert "usage_gate changed" in captured.out
|
|
474
|
+
assert "'warn' -> 'block'" in captured.out
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
def test_driver_loop_survives_a_mid_run_config_parse_failure(driver_factory, capsys):
|
|
478
|
+
"""A coordinator.yml an operator is mid-editing (truncated write, a
|
|
479
|
+
YAML typo) must never kill an otherwise-healthy drive: the last-good
|
|
480
|
+
config stays in force, the drive keeps running to its deadline, and the
|
|
481
|
+
warning is printed exactly once for the whole broken window — not once
|
|
482
|
+
per poll."""
|
|
483
|
+
cfg = make_config()
|
|
484
|
+
|
|
485
|
+
def broken_loader(_path):
|
|
486
|
+
raise ValueError("while parsing a block mapping")
|
|
487
|
+
|
|
488
|
+
driver = driver_factory(
|
|
489
|
+
[board(status="running")],
|
|
490
|
+
opts=DriveOptions(machine="precision", poll=1.0, deadline_mins=2.5 / 60.0),
|
|
491
|
+
config=cfg,
|
|
492
|
+
config_loader=broken_loader,
|
|
493
|
+
)
|
|
494
|
+
assert driver.run() == EXIT_DEADLINE
|
|
495
|
+
assert driver.config is cfg # last-good snapshot, never replaced
|
|
496
|
+
err = capsys.readouterr().err
|
|
497
|
+
assert err.count("coordinator.yml reload failed") == 1
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
def test_driver_loop_config_reload_never_mutates_opts(driver_factory):
|
|
501
|
+
"""`self.opts` is this invocation's own identity (the CLI flags) — a
|
|
502
|
+
config reload must never touch it, even across several successful
|
|
503
|
+
reloads that DO change `self.config`."""
|
|
504
|
+
cfg_a = _config_with_gate(mode="warn", session_threshold_pct=50.0)
|
|
505
|
+
cfg_b = _config_with_gate(mode="disabled")
|
|
506
|
+
reloads = [cfg_a, cfg_b, cfg_a, cfg_b]
|
|
507
|
+
calls = {"n": 0}
|
|
508
|
+
|
|
509
|
+
def loader(_path):
|
|
510
|
+
idx = min(calls["n"], len(reloads) - 1)
|
|
511
|
+
calls["n"] += 1
|
|
512
|
+
return reloads[idx]
|
|
513
|
+
|
|
514
|
+
opts = DriveOptions(machine="precision", poll=1.0, deadline_mins=3.5 / 60.0)
|
|
515
|
+
driver = driver_factory(
|
|
516
|
+
[board(status="running")], opts=opts, config=cfg_a, config_loader=loader,
|
|
517
|
+
)
|
|
518
|
+
assert driver.run() == EXIT_DEADLINE
|
|
519
|
+
assert driver.opts is opts
|
|
520
|
+
assert driver.opts.machine == "precision"
|
|
521
|
+
assert driver.opts.poll == 1.0
|
|
522
|
+
# The reload really did run (and really did change self.config) —
|
|
523
|
+
# otherwise this test would trivially pass by never exercising reload.
|
|
524
|
+
assert calls["n"] >= 2
|
|
525
|
+
|
|
526
|
+
|
|
431
527
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
432
528
|
# no work yet: plan / dispatch
|
|
433
529
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -6294,7 +6390,7 @@ def driver_factory(tmp_path, monkeypatch, capsys):
|
|
|
6294
6390
|
|
|
6295
6391
|
def make(
|
|
6296
6392
|
payloads, *, opts=None, verifier=None, config=None, oracle_gate=None,
|
|
6297
|
-
usage_prober=None, self_head_probe=None, ticks=200,
|
|
6393
|
+
usage_prober=None, self_head_probe=None, config_loader=None, ticks=200,
|
|
6298
6394
|
):
|
|
6299
6395
|
clock = {"t": 0.0}
|
|
6300
6396
|
recorded: list[list[str]] = []
|
|
@@ -6305,14 +6401,24 @@ def driver_factory(tmp_path, monkeypatch, capsys):
|
|
|
6305
6401
|
|
|
6306
6402
|
monkeypatch.setattr("coord.drive.subprocess.run", fake_run)
|
|
6307
6403
|
|
|
6404
|
+
resolved_config = config or make_config()
|
|
6308
6405
|
driver = Driver(
|
|
6309
6406
|
repo=REPO,
|
|
6310
6407
|
issue=ISSUE,
|
|
6311
6408
|
opts=opts or DriveOptions(machine="precision", poll=1.0),
|
|
6312
|
-
config=
|
|
6409
|
+
config=resolved_config,
|
|
6313
6410
|
fetcher=FakeFetcher(payloads),
|
|
6314
6411
|
verifier=verifier or FakeVerifier(),
|
|
6315
6412
|
oracle_gate=oracle_gate,
|
|
6413
|
+
# #1654: default to a no-op reload (hands back the SAME config
|
|
6414
|
+
# object every poll) — a real driver re-reads coordinator.yml
|
|
6415
|
+
# from disk every tick, but defaulting to that here would make
|
|
6416
|
+
# every existing test in this module implicitly depend on
|
|
6417
|
+
# `$COORD_CONFIG`/`~/.coord/coordinator.yml` resolving
|
|
6418
|
+
# successfully (or silently latching the one-warn-only path),
|
|
6419
|
+
# neither of which is what those tests are about. Tests
|
|
6420
|
+
# exercising the reload itself pass their own.
|
|
6421
|
+
config_loader=config_loader or (lambda _path: resolved_config),
|
|
6316
6422
|
# #1466: never let a Driver test shell out to a real `claude -p
|
|
6317
6423
|
# "/usage"` — default to a stub reporting "unknown" (same as no
|
|
6318
6424
|
# probe at all), which the gate always treats as "proceed,
|