code-coordinator 0.5.536__tar.gz → 0.5.538__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.536 → code_coordinator-0.5.538}/PKG-INFO +1 -1
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/gate_a.py +51 -2
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/lifecycle.py +1 -1
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/status.py +11 -2
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/failure_class.py +11 -1
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/milestone_dispatch.py +72 -4
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/progress.py +12 -1
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/usage.py +35 -4
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_gate_a.py +34 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_provider.py +48 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_dispatch.py +156 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_provider_seam.py +139 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_usage.py +38 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/.gitignore +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/CLAUDE.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/GOAL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/LICENSE +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/MANIFEST.in +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/README.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/__init__.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agent.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/audit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/backup.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/block_log.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/board_service.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/brain.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/claim.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/cli.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/client.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/codegen.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/comments.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/config.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dao.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/db.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/deps.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/drive.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/events.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/filelock.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/freshness.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gates.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/goal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/context.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/models.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/render.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/health/units.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/hooks.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/interactive.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/models.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/network.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/notify.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/openapi.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/parentage.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/plans.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/release_window.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/reports.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/review.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/self_health.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/smoke.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/split_work.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/sql.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/state.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/test_author.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/test_report.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/install-agent.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/pyproject.toml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/setup.cfg +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/__init__.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/backends.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/conftest.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_client.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_db.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_events.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_init.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_models.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_network.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_session.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_split.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_state.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.536 → code_coordinator-0.5.538}/tests/write_parity.py +0 -0
|
@@ -137,17 +137,46 @@ def _fetch_contract(repo_cfg, config, milestone_number: int) -> str | None:
|
|
|
137
137
|
number doesn't say whether it's a directory-discovered driver's slice
|
|
138
138
|
(shared repo-root tree) or an entrypoint-linked driver's relocated one,
|
|
139
139
|
so this checks each candidate :func:`coord.acceptance.
|
|
140
|
-
gate_a_contract_candidates` returns until one exists.
|
|
140
|
+
gate_a_contract_candidates` returns until one exists.
|
|
141
|
+
|
|
142
|
+
Returns ``None`` only when every candidate genuinely 404'd — a
|
|
143
|
+
confirmed absence. Raises :class:`coord.github_ops.GhTransientError`
|
|
144
|
+
(unchanged) when a candidate's read failed because ``gh`` classified it
|
|
145
|
+
as a GitHub rate limit (:func:`coord.github_ops._classify_rate_limit`,
|
|
146
|
+
surfaced as :class:`coord.github_ops.GhRateLimitError`) rather than a
|
|
147
|
+
404: #2973's bug was exactly this distinction getting lost — a
|
|
148
|
+
rate-limited read was folded into the same ``except RuntimeError:
|
|
149
|
+
continue`` as a real 404, so "I could not tell" silently became "it
|
|
150
|
+
does not exist". A transient failure on ANY candidate makes the whole
|
|
151
|
+
read inconclusive (a later candidate 404'ing doesn't confirm the
|
|
152
|
+
transiently-failed one is absent too), so it takes priority over a
|
|
153
|
+
clean ``None`` even if a later candidate genuinely 404s.
|
|
154
|
+
|
|
155
|
+
Narrower than it may sound: only a rate limit is currently classified
|
|
156
|
+
this way — a plain non-zero ``gh`` exit that isn't a rate limit (a bad
|
|
157
|
+
token, a genuine network failure, ``gh`` missing) still raises a plain
|
|
158
|
+
``RuntimeError``/:class:`coord.github_ops.GhError` and is still folded
|
|
159
|
+
into ``continue`` below, same as before this fix. Tracked as a
|
|
160
|
+
follow-up rather than widened here, since ``_is_transient_error``-style
|
|
161
|
+
reclassification of those cases is a broader, separately-reviewable
|
|
162
|
+
change to ``coord.github_ops._gh`` itself.
|
|
163
|
+
"""
|
|
141
164
|
from coord import github_ops # noqa: PLC0415
|
|
142
165
|
from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
|
|
143
166
|
|
|
167
|
+
transient: github_ops.GhTransientError | None = None
|
|
144
168
|
for path in gate_a_contract_candidates(config, repo_cfg.name, milestone_number):
|
|
145
169
|
try:
|
|
146
170
|
return github_ops.get_repo_file(
|
|
147
171
|
repo_cfg.github, path, branch=repo_cfg.default_branch,
|
|
148
172
|
)
|
|
173
|
+
except github_ops.GhTransientError as e:
|
|
174
|
+
transient = transient or e
|
|
175
|
+
continue
|
|
149
176
|
except RuntimeError:
|
|
150
177
|
continue
|
|
178
|
+
if transient is not None:
|
|
179
|
+
raise transient
|
|
151
180
|
return None
|
|
152
181
|
|
|
153
182
|
|
|
@@ -216,7 +245,27 @@ def gate_a(
|
|
|
216
245
|
sys.exit(2)
|
|
217
246
|
milestone_number = int(milestone_number)
|
|
218
247
|
|
|
219
|
-
|
|
248
|
+
try:
|
|
249
|
+
contract_text = _fetch_contract(repo_cfg, cfg, milestone_number)
|
|
250
|
+
except github_ops.GhTransientError as e:
|
|
251
|
+
# #2973: a failed READ is a different claim than a confirmed
|
|
252
|
+
# ABSENCE — only the latter justifies telling the caller to
|
|
253
|
+
# dispatch `coord acceptance mock` (which, against a milestone
|
|
254
|
+
# that already has an approved contract, produces a duplicate/
|
|
255
|
+
# conflicting one). Mirror the issue-fetch path just above, which
|
|
256
|
+
# already reports this correctly: name the real cause and ask for
|
|
257
|
+
# a retry, print no remedy.
|
|
258
|
+
click.echo(
|
|
259
|
+
f"error: could not read the Gate-A contract for ms-{milestone_number} "
|
|
260
|
+
f"({repo}#{tracking_issue}): {e}",
|
|
261
|
+
err=True,
|
|
262
|
+
)
|
|
263
|
+
click.echo(
|
|
264
|
+
" This is a failed read, not a confirmed absence — the contract "
|
|
265
|
+
"may well exist. Retry once the rate limit clears.",
|
|
266
|
+
err=True,
|
|
267
|
+
)
|
|
268
|
+
sys.exit(1)
|
|
220
269
|
if contract_text is None:
|
|
221
270
|
from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
|
|
222
271
|
|
|
@@ -428,7 +428,7 @@ def done(config_path: Path) -> None:
|
|
|
428
428
|
pass
|
|
429
429
|
|
|
430
430
|
all_assignments = list(board.active) + list(board.completed)
|
|
431
|
-
session_usage = build_session_usage(all_assignments, started_at=started_at)
|
|
431
|
+
session_usage = build_session_usage(all_assignments, started_at=started_at, cfg=cfg)
|
|
432
432
|
total_cost = session_usage.total_cost_usd
|
|
433
433
|
|
|
434
434
|
click.echo("")
|
|
@@ -980,7 +980,7 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
|
|
|
980
980
|
pass
|
|
981
981
|
|
|
982
982
|
all_assignments = list(board.active) + list(board.completed)
|
|
983
|
-
session_usage = build_session_usage(all_assignments, started_at=started_at)
|
|
983
|
+
session_usage = build_session_usage(all_assignments, started_at=started_at, cfg=cfg)
|
|
984
984
|
burn_line = format_burn_rate_line(session_usage)
|
|
985
985
|
if burn_line:
|
|
986
986
|
click.echo("")
|
|
@@ -1103,7 +1103,7 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
|
|
|
1103
1103
|
machine_by_aid = {
|
|
1104
1104
|
a.assignment_id: a.machine_name for a in rows if a.assignment_id
|
|
1105
1105
|
}
|
|
1106
|
-
usage = build_session_usage(rows, remote_by_id=agent_completed or None)
|
|
1106
|
+
usage = build_session_usage(rows, remote_by_id=agent_completed or None, cfg=cfg)
|
|
1107
1107
|
for au in usage.assignments:
|
|
1108
1108
|
# #3376 review round 2: `cost_unknown` means no local log AND no
|
|
1109
1109
|
# remote entry. That is the ghost-dispatch signal ONLY if this
|
|
@@ -2992,6 +2992,14 @@ def usage(
|
|
|
2992
2992
|
pass
|
|
2993
2993
|
|
|
2994
2994
|
# Optionally fetch remote cost data for assignments without local logs.
|
|
2995
|
+
# #2305: cfg is only loaded here (not unconditionally) — the bare
|
|
2996
|
+
# `coord usage` view has always worked with no coordinator.yml present
|
|
2997
|
+
# at all (see TestUsageCommandBareViewHonorsWindowFlags), and that must
|
|
2998
|
+
# stay true. When it IS loaded (here, or by --remote below), it's
|
|
2999
|
+
# threaded into build_session_usage() so a tier-named provider (e.g.
|
|
3000
|
+
# "oc-mid") resolves correctly instead of degrading to ClaudeProvider
|
|
3001
|
+
# log parsing.
|
|
3002
|
+
cfg: "Config | None" = None
|
|
2995
3003
|
remote_by_id: dict[str, dict] = {}
|
|
2996
3004
|
if remote and all_assignments:
|
|
2997
3005
|
cfg = _load_config(config_path)
|
|
@@ -3027,6 +3035,7 @@ def usage(
|
|
|
3027
3035
|
all_assignments,
|
|
3028
3036
|
remote_by_id=remote_by_id if remote_by_id else None,
|
|
3029
3037
|
started_at=started_at,
|
|
3038
|
+
cfg=cfg,
|
|
3030
3039
|
)
|
|
3031
3040
|
click.echo(format_usage_report(session, window_label=window_label))
|
|
3032
3041
|
|
|
@@ -79,6 +79,7 @@ from coord.worker_events import (
|
|
|
79
79
|
)
|
|
80
80
|
|
|
81
81
|
if TYPE_CHECKING:
|
|
82
|
+
from coord.config import Config
|
|
82
83
|
from coord.providers.base import Provider
|
|
83
84
|
|
|
84
85
|
# ── the two classes ─────────────────────────────────────────────────────────
|
|
@@ -461,6 +462,7 @@ def classify_log(
|
|
|
461
462
|
tail_bytes: int = 65536,
|
|
462
463
|
provider_name: str | None = None,
|
|
463
464
|
provider: "Provider | None" = None,
|
|
465
|
+
cfg: "Config | None" = None,
|
|
464
466
|
) -> FailureClassification:
|
|
465
467
|
"""Classify a worker's terminal state from its log.
|
|
466
468
|
|
|
@@ -484,6 +486,14 @@ def classify_log(
|
|
|
484
486
|
an escape hatch for tests to pass an already-constructed provider
|
|
485
487
|
directly, bypassing name resolution.
|
|
486
488
|
|
|
489
|
+
*cfg* (#2305): the coordinator's :class:`~coord.config.Config`, passed
|
|
490
|
+
straight through to :func:`coord.providers.get_provider` so a
|
|
491
|
+
tier-named ``providers.definitions`` entry (e.g. ``oc-mid``) resolves to
|
|
492
|
+
its real backend instead of silently degrading to
|
|
493
|
+
:class:`~coord.providers.claude.ClaudeProvider` — *provider_name* alone
|
|
494
|
+
only ever matches the built-in type names. ``None`` (the default)
|
|
495
|
+
preserves pre-#2305 behaviour.
|
|
496
|
+
|
|
487
497
|
#1710 NOTE — a documented, narrow behaviour difference from the
|
|
488
498
|
pre-#1710 implementation: that version additionally scanned the raw
|
|
489
499
|
``result`` event's ``error`` and bare ``subtype`` fields (via
|
|
@@ -509,7 +519,7 @@ def classify_log(
|
|
|
509
519
|
|
|
510
520
|
if provider is None:
|
|
511
521
|
from coord.providers import get_provider # noqa: PLC0415
|
|
512
|
-
provider = get_provider(provider_name)
|
|
522
|
+
provider = get_provider(provider_name, cfg=cfg)
|
|
513
523
|
summary = provider.parse_log(log_path, tail_bytes=tail_bytes)
|
|
514
524
|
|
|
515
525
|
classification = classify_failure(
|
|
@@ -197,6 +197,11 @@ def is_milestone_complete(ctx: MilestoneContext) -> bool:
|
|
|
197
197
|
|
|
198
198
|
# (repo_github, path, branch) -> True if the file exists at that ref.
|
|
199
199
|
# Injected so tests never hit `gh` — mirrors ``coord.claim``'s BranchLookup.
|
|
200
|
+
#
|
|
201
|
+
# #2973: may also raise ``coord.github_ops.GhTransientError`` — a failed
|
|
202
|
+
# read (auth, network, a GitHub rate limit) is a different claim than a
|
|
203
|
+
# confirmed 404, and callers (``gate_a_status``) must not fold the two
|
|
204
|
+
# together the way the pre-#2973 default implementation did.
|
|
200
205
|
GateAFileExists = Callable[[str, str, str], bool]
|
|
201
206
|
|
|
202
207
|
|
|
@@ -206,6 +211,11 @@ def _default_gate_a_file_exists(repo_github: str, path: str, branch: str) -> boo
|
|
|
206
211
|
try:
|
|
207
212
|
github_ops.get_repo_file(repo_github, path, branch=branch)
|
|
208
213
|
return True
|
|
214
|
+
except github_ops.GhTransientError:
|
|
215
|
+
# #2973: a rate-limited (or otherwise transient) read is NOT a
|
|
216
|
+
# confirmed absence — let it propagate so `gate_a_status` can tell
|
|
217
|
+
# the two apart, instead of silently becoming `False` here.
|
|
218
|
+
raise
|
|
209
219
|
except RuntimeError:
|
|
210
220
|
return False
|
|
211
221
|
|
|
@@ -235,17 +245,42 @@ def gate_a_status(
|
|
|
235
245
|
checking only the legacy repo-root path and reporting a false "Gate A
|
|
236
246
|
not satisfied" for a milestone whose contract already exists, just
|
|
237
247
|
somewhere else.
|
|
248
|
+
|
|
249
|
+
#2973: a candidate whose read *fails* (auth, network, a GitHub rate
|
|
250
|
+
limit — :class:`coord.github_ops.GhTransientError`) is a different claim
|
|
251
|
+
than a candidate that genuinely 404s, and only the latter justifies the
|
|
252
|
+
"run `coord acceptance mock`" remedy below — that remedy dispatches a
|
|
253
|
+
duplicate mock-author against a milestone that may already have an
|
|
254
|
+
approved contract. Mirrors :func:`coord.commands.gate_a._fetch_contract`:
|
|
255
|
+
a confirmed existence on ANY candidate wins outright (even after an
|
|
256
|
+
earlier candidate's transient failure), but a transient failure on any
|
|
257
|
+
checked candidate makes the whole read inconclusive when nothing else
|
|
258
|
+
confirms existence — reported distinctly, with no dispatch-a-mock-author
|
|
259
|
+
remedy attached.
|
|
238
260
|
"""
|
|
239
261
|
if not config.acceptance.has_driver(repo_cfg.name):
|
|
240
262
|
return None
|
|
241
263
|
|
|
264
|
+
from coord import github_ops # noqa: PLC0415
|
|
242
265
|
from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
|
|
243
266
|
|
|
244
267
|
candidates = gate_a_contract_candidates(config, repo_cfg.name, milestone_number)
|
|
245
268
|
check = file_exists or _default_gate_a_file_exists
|
|
269
|
+
transient: github_ops.GhTransientError | None = None
|
|
246
270
|
for path in candidates:
|
|
247
|
-
|
|
248
|
-
|
|
271
|
+
try:
|
|
272
|
+
if check(repo_cfg.github, path, repo_cfg.default_branch):
|
|
273
|
+
return None
|
|
274
|
+
except github_ops.GhTransientError as e:
|
|
275
|
+
transient = transient or e
|
|
276
|
+
continue
|
|
277
|
+
if transient is not None:
|
|
278
|
+
return (
|
|
279
|
+
f"Gate A undetermined: could not read {repo_cfg.name}'s Gate-A "
|
|
280
|
+
f"contract on {repo_cfg.default_branch!r} ({transient}). This is "
|
|
281
|
+
"a failed read, not a confirmed absence — the contract may well "
|
|
282
|
+
"exist. Retry once the rate limit clears."
|
|
283
|
+
)
|
|
249
284
|
named = " or ".join(repr(p) for p in candidates)
|
|
250
285
|
return (
|
|
251
286
|
f"Gate A not satisfied: {named} does not exist yet on "
|
|
@@ -257,6 +292,17 @@ def gate_a_status(
|
|
|
257
292
|
|
|
258
293
|
# (repo_github, path, branch) -> file content, or None if it doesn't exist.
|
|
259
294
|
# Injected so tests never hit `gh` — mirrors GateAFileExists above.
|
|
295
|
+
#
|
|
296
|
+
# #2973: may also raise ``coord.github_ops.GhTransientError`` — same reason
|
|
297
|
+
# as ``GateAFileExists`` above. ``gate_a_signoff_status`` and
|
|
298
|
+
# ``issue_oracle_ready`` both build a ``GateAFileExists`` closure on top of
|
|
299
|
+
# this fetch (memoised, so the existence probe and the content read share
|
|
300
|
+
# one call), so this must propagate the same distinction they'd otherwise
|
|
301
|
+
# lose. Callers that only want *content*, never existence — the manifest/
|
|
302
|
+
# exempt reads in ``_fetch_manifest_data`` and the contract-hashing loop in
|
|
303
|
+
# ``gate_a_signoff`` — catch it locally and keep degrading to ``None``,
|
|
304
|
+
# their pre-#2973 behaviour: those reads are advisory/best-effort, not the
|
|
305
|
+
# gate whose misreporting #2973 is about.
|
|
260
306
|
ManifestFetch = Callable[[str, str, str], "str | None"]
|
|
261
307
|
|
|
262
308
|
|
|
@@ -265,6 +311,8 @@ def _default_fetch_repo_file(repo_github: str, path: str, branch: str) -> str |
|
|
|
265
311
|
|
|
266
312
|
try:
|
|
267
313
|
return github_ops.get_repo_file(repo_github, path, branch=branch)
|
|
314
|
+
except github_ops.GhTransientError:
|
|
315
|
+
raise
|
|
268
316
|
except RuntimeError:
|
|
269
317
|
return None
|
|
270
318
|
|
|
@@ -313,6 +361,7 @@ def _fetch_manifest_data(
|
|
|
313
361
|
legacy manifest and/or fragment file; a milestone's data lives under
|
|
314
362
|
exactly one, so the first root that produces anything wins.
|
|
315
363
|
"""
|
|
364
|
+
from coord import github_ops # noqa: PLC0415
|
|
316
365
|
from coord.acceptance import ( # noqa: PLC0415
|
|
317
366
|
ACCEPTANCE_DIRNAME,
|
|
318
367
|
MANIFEST_FRAGMENTS_DIRNAME,
|
|
@@ -326,7 +375,14 @@ def _fetch_manifest_data(
|
|
|
326
375
|
def _fetch_one(dir_path: str, filename_stem: str) -> "tuple[ManifestData, bool]":
|
|
327
376
|
for ext in (".yml", ".yaml", ".json"):
|
|
328
377
|
path = f"{dir_path}/{filename_stem}{ext}"
|
|
329
|
-
|
|
378
|
+
try:
|
|
379
|
+
content = fetch(repo_github, path, branch)
|
|
380
|
+
except github_ops.GhTransientError:
|
|
381
|
+
# #2973: this is an advisory manifest/exempt read, not the
|
|
382
|
+
# contract-existence gate — a transient GitHub error here
|
|
383
|
+
# degrades to "no manifest data yet" exactly like a genuine
|
|
384
|
+
# 404 always has, rather than crashing dispatch.
|
|
385
|
+
content = None
|
|
330
386
|
if content is None:
|
|
331
387
|
continue
|
|
332
388
|
try:
|
|
@@ -433,11 +489,23 @@ def gate_a_signoff(
|
|
|
433
489
|
for the common single-candidate case).
|
|
434
490
|
"""
|
|
435
491
|
from coord import gate_a as gate_a_mod # noqa: PLC0415
|
|
492
|
+
from coord import github_ops # noqa: PLC0415
|
|
436
493
|
from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
|
|
437
494
|
|
|
438
495
|
contract_text: str | None = None
|
|
439
496
|
for path in gate_a_contract_candidates(config, repo_cfg.name, milestone_number):
|
|
440
|
-
|
|
497
|
+
try:
|
|
498
|
+
contract_text = fetch(repo_cfg.github, path, repo_cfg.default_branch)
|
|
499
|
+
except github_ops.GhTransientError:
|
|
500
|
+
# #2973: by the time this runs, `gate_a_status` has already
|
|
501
|
+
# confirmed SOME candidate exists (that's the precondition every
|
|
502
|
+
# caller of this checks first) — a transient failure re-reading
|
|
503
|
+
# a candidate here (this loop re-walks the same list, and a
|
|
504
|
+
# not-yet-memoised path can still hit a fresh rate limit) just
|
|
505
|
+
# means this particular candidate isn't the hashable one; keep
|
|
506
|
+
# walking rather than letting the read crash the signoff check.
|
|
507
|
+
contract_text = None
|
|
508
|
+
continue
|
|
441
509
|
if contract_text is not None:
|
|
442
510
|
break
|
|
443
511
|
return gate_a_mod.evaluate(
|
|
@@ -26,6 +26,7 @@ from pathlib import Path
|
|
|
26
26
|
from typing import TYPE_CHECKING
|
|
27
27
|
|
|
28
28
|
if TYPE_CHECKING:
|
|
29
|
+
from coord.config import Config
|
|
29
30
|
from coord.providers.base import Provider
|
|
30
31
|
|
|
31
32
|
|
|
@@ -118,6 +119,7 @@ def parse_progress(
|
|
|
118
119
|
*,
|
|
119
120
|
provider_name: str | None = None,
|
|
120
121
|
provider: "Provider | None" = None,
|
|
122
|
+
cfg: "Config | None" = None,
|
|
121
123
|
) -> WorkerProgress:
|
|
122
124
|
"""Parse progress from a worker log.
|
|
123
125
|
|
|
@@ -137,6 +139,15 @@ def parse_progress(
|
|
|
137
139
|
precedence over *provider_name*. Mainly for tests that want to
|
|
138
140
|
exercise a specific (e.g. fake, non-claude) provider without
|
|
139
141
|
wiring up a full :class:`~coord.config.Config`.
|
|
142
|
+
cfg: The coordinator's :class:`~coord.config.Config`, when the caller
|
|
143
|
+
has one in scope. #2305: without this, ``provider_name`` only
|
|
144
|
+
ever resolves against the built-in provider *types*
|
|
145
|
+
(``claude``/``claude-pty``/``opencode``) — a **tier-named**
|
|
146
|
+
``providers.definitions`` entry (e.g. ``oc-mid``) silently
|
|
147
|
+
degrades to :class:`~coord.providers.claude.ClaudeProvider`.
|
|
148
|
+
Passed straight through to :func:`coord.providers.get_provider`;
|
|
149
|
+
``None`` (the default) preserves the pre-#2305 built-ins-only
|
|
150
|
+
resolution, so existing callers are unaffected.
|
|
140
151
|
"""
|
|
141
152
|
from coord.worker_events import detect_anomalies, is_stream_json
|
|
142
153
|
|
|
@@ -147,7 +158,7 @@ def parse_progress(
|
|
|
147
158
|
if is_stream_json(p):
|
|
148
159
|
if provider is None:
|
|
149
160
|
from coord.providers import get_provider # noqa: PLC0415
|
|
150
|
-
provider = get_provider(provider_name)
|
|
161
|
+
provider = get_provider(provider_name, cfg=cfg)
|
|
151
162
|
summary = provider.parse_log(p, tail_bytes=tail_bytes)
|
|
152
163
|
progress = WorkerProgress()
|
|
153
164
|
# Synthesise a single rolling "update" line so coord status keeps
|
|
@@ -27,6 +27,7 @@ from coord.models import Assignment
|
|
|
27
27
|
from coord.state import COORD_DIR
|
|
28
28
|
|
|
29
29
|
if TYPE_CHECKING:
|
|
30
|
+
from coord.config import Config
|
|
30
31
|
from coord.providers.base import Provider
|
|
31
32
|
|
|
32
33
|
_log = logging.getLogger(__name__)
|
|
@@ -155,6 +156,7 @@ def parse_usage_from_log(
|
|
|
155
156
|
*,
|
|
156
157
|
provider_name: str | None = None,
|
|
157
158
|
provider: "Provider | None" = None,
|
|
159
|
+
cfg: "Config | None" = None,
|
|
158
160
|
) -> AssignmentUsage | None:
|
|
159
161
|
"""Parse an :class:`AssignmentUsage` from a worker log file.
|
|
160
162
|
|
|
@@ -172,6 +174,14 @@ def parse_usage_from_log(
|
|
|
172
174
|
behaviour byte-for-byte for every caller that doesn't pass it. *provider*
|
|
173
175
|
is an escape hatch to pass an already-constructed provider directly
|
|
174
176
|
(tests; bypasses name resolution).
|
|
177
|
+
|
|
178
|
+
*cfg* (#2305): the coordinator's :class:`~coord.config.Config`, passed
|
|
179
|
+
straight through to :func:`coord.providers.get_provider` so a
|
|
180
|
+
**tier-named** ``providers.definitions`` entry (e.g. ``oc-mid``) resolves
|
|
181
|
+
to its real backend instead of silently degrading to
|
|
182
|
+
:class:`~coord.providers.claude.ClaudeProvider` — *provider_name* alone
|
|
183
|
+
only ever matches the built-in type names. ``None`` (the default)
|
|
184
|
+
preserves pre-#2305 behaviour.
|
|
175
185
|
"""
|
|
176
186
|
from coord.worker_events import is_stream_json
|
|
177
187
|
|
|
@@ -179,7 +189,7 @@ def parse_usage_from_log(
|
|
|
179
189
|
return None
|
|
180
190
|
if provider is None:
|
|
181
191
|
from coord.providers import get_provider # noqa: PLC0415
|
|
182
|
-
provider = get_provider(provider_name)
|
|
192
|
+
provider = get_provider(provider_name, cfg=cfg)
|
|
183
193
|
if not is_stream_json(log_path):
|
|
184
194
|
# #1710: a provider that claims it reports cost but whose log isn't
|
|
185
195
|
# stream-json shaped gets NO cost/token data here — that mismatch is
|
|
@@ -221,6 +231,7 @@ def _assignment_to_usage(
|
|
|
221
231
|
*,
|
|
222
232
|
logs_dir: Path | None = None,
|
|
223
233
|
remote_data: dict | None = None,
|
|
234
|
+
cfg: "Config | None" = None,
|
|
224
235
|
) -> AssignmentUsage:
|
|
225
236
|
"""Build an :class:`AssignmentUsage` for *a*.
|
|
226
237
|
|
|
@@ -229,6 +240,12 @@ def _assignment_to_usage(
|
|
|
229
240
|
|
|
230
241
|
*remote_data* is a dict from the agent's ``list_assignments()`` response
|
|
231
242
|
(e.g. ``{"cost_so_far": 0.12, "model_used": "claude-sonnet-4-6", ...}``).
|
|
243
|
+
|
|
244
|
+
*cfg* (#2305): threaded through to both the local-log parse and the
|
|
245
|
+
"neither local nor remote" ``get_provider`` fallback below, so a
|
|
246
|
+
tier-named provider (e.g. ``oc-mid``) resolves to its real backend
|
|
247
|
+
rather than :class:`~coord.providers.claude.ClaudeProvider`. ``None``
|
|
248
|
+
(the default) preserves pre-#2305 behaviour.
|
|
232
249
|
"""
|
|
233
250
|
_logs_dir = logs_dir if logs_dir is not None else LOGS_DIR
|
|
234
251
|
from coord.models import effective_issue_number # noqa: PLC0415
|
|
@@ -252,7 +269,7 @@ def _assignment_to_usage(
|
|
|
252
269
|
# #1710: thread the assignment's resolved provider name through so
|
|
253
270
|
# the parse uses the right provider's parse_log() rather than always
|
|
254
271
|
# assuming claude.
|
|
255
|
-
parsed = parse_usage_from_log(log_path, provider_name=a.provider_name)
|
|
272
|
+
parsed = parse_usage_from_log(log_path, provider_name=a.provider_name, cfg=cfg)
|
|
256
273
|
if parsed is not None:
|
|
257
274
|
usage.model = parsed.model or a.model
|
|
258
275
|
usage.total_cost_usd = parsed.total_cost_usd
|
|
@@ -283,7 +300,7 @@ def _assignment_to_usage(
|
|
|
283
300
|
if a.assignment_id:
|
|
284
301
|
from coord.providers import get_provider # noqa: PLC0415
|
|
285
302
|
|
|
286
|
-
provider = get_provider(a.provider_name)
|
|
303
|
+
provider = get_provider(a.provider_name, cfg=cfg)
|
|
287
304
|
if provider.capabilities().cost_reporting:
|
|
288
305
|
usage.cost_unknown = True
|
|
289
306
|
|
|
@@ -298,6 +315,7 @@ def collect_usage(
|
|
|
298
315
|
*,
|
|
299
316
|
logs_dir: Path | None = None,
|
|
300
317
|
remote_by_id: dict[str, dict] | None = None,
|
|
318
|
+
cfg: "Config | None" = None,
|
|
301
319
|
) -> list[AssignmentUsage]:
|
|
302
320
|
"""Collect :class:`AssignmentUsage` for every assignment on the board.
|
|
303
321
|
|
|
@@ -305,13 +323,21 @@ def collect_usage(
|
|
|
305
323
|
whose logs live on a remote machine. Pass ``None`` (the default) to skip
|
|
306
324
|
remote lookups entirely — the result will still be correct for any
|
|
307
325
|
assignment whose log is available locally.
|
|
326
|
+
|
|
327
|
+
*cfg* (#2305): the coordinator's :class:`~coord.config.Config`, when the
|
|
328
|
+
caller has one — threaded to :func:`_assignment_to_usage` so a
|
|
329
|
+
tier-named ``providers.definitions`` entry resolves correctly rather
|
|
330
|
+
than degrading to :class:`~coord.providers.claude.ClaudeProvider`.
|
|
331
|
+
``None`` (the default) preserves pre-#2305 behaviour.
|
|
308
332
|
"""
|
|
309
333
|
result: list[AssignmentUsage] = []
|
|
310
334
|
for a in board_assignments:
|
|
311
335
|
if not a.assignment_id:
|
|
312
336
|
continue
|
|
313
337
|
remote = (remote_by_id or {}).get(a.assignment_id)
|
|
314
|
-
result.append(
|
|
338
|
+
result.append(
|
|
339
|
+
_assignment_to_usage(a, logs_dir=logs_dir, remote_data=remote, cfg=cfg)
|
|
340
|
+
)
|
|
315
341
|
return result
|
|
316
342
|
|
|
317
343
|
|
|
@@ -321,12 +347,16 @@ def build_session_usage(
|
|
|
321
347
|
logs_dir: Path | None = None,
|
|
322
348
|
remote_by_id: dict[str, dict] | None = None,
|
|
323
349
|
started_at: float | None = None,
|
|
350
|
+
cfg: "Config | None" = None,
|
|
324
351
|
) -> SessionUsage:
|
|
325
352
|
"""Build a :class:`SessionUsage` from the current board.
|
|
326
353
|
|
|
327
354
|
*started_at* should come from ``session.json["started_at"]`` (parsed to
|
|
328
355
|
a Unix timestamp). If not provided we fall back to the oldest
|
|
329
356
|
``dispatched_at`` among the assignments.
|
|
357
|
+
|
|
358
|
+
*cfg* (#2305): passed straight through to :func:`collect_usage` — see
|
|
359
|
+
its docstring.
|
|
330
360
|
"""
|
|
331
361
|
if started_at is None:
|
|
332
362
|
# Derive from oldest dispatch time on the board.
|
|
@@ -341,6 +371,7 @@ def build_session_usage(
|
|
|
341
371
|
board_assignments,
|
|
342
372
|
logs_dir=logs_dir,
|
|
343
373
|
remote_by_id=remote_by_id,
|
|
374
|
+
cfg=cfg,
|
|
344
375
|
)
|
|
345
376
|
return SessionUsage(started_at=started_at, assignments=assignments)
|
|
346
377
|
|
|
@@ -209,6 +209,40 @@ class TestGateACommand:
|
|
|
209
209
|
assert result.exit_code == 1
|
|
210
210
|
assert "coord acceptance mock" in result.output
|
|
211
211
|
|
|
212
|
+
def test_a_rate_limited_read_is_not_reported_as_a_missing_contract(
|
|
213
|
+
self, config_file: Path, coord_db
|
|
214
|
+
) -> None:
|
|
215
|
+
"""#2973: a failed contents-API read (GitHub secondary rate limit)
|
|
216
|
+
must not be folded into the same "does not exist" outcome as a
|
|
217
|
+
genuine 404 — the file was on `main` the whole time; only the read
|
|
218
|
+
failed. Reporting it as absent recommends `coord acceptance mock`,
|
|
219
|
+
which against an already-approved milestone dispatches a duplicate
|
|
220
|
+
mock-author."""
|
|
221
|
+
from coord.github_ops import GhRateLimitError
|
|
222
|
+
|
|
223
|
+
def _repo_file(repo: str, path: str, branch: str | None = None) -> str:
|
|
224
|
+
raise GhRateLimitError(
|
|
225
|
+
"gh api repos/acme/api/contents/tests/acceptance/ms-37/"
|
|
226
|
+
"contract.md?ref=main failed: API rate limit exceeded for "
|
|
227
|
+
"user ID 12345",
|
|
228
|
+
secondary=True,
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
with patch(
|
|
232
|
+
"coord.github_ops.get_issue",
|
|
233
|
+
return_value={"title": "ms-37 epic", "milestone": {"number": 37}, "labels": []},
|
|
234
|
+
), patch("coord.github_ops.get_repo_file", side_effect=_repo_file):
|
|
235
|
+
result = CliRunner().invoke(
|
|
236
|
+
main,
|
|
237
|
+
["gate-a", "--approved", "api", "900", "--config", str(config_file)],
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
assert result.exit_code == 1
|
|
241
|
+
assert "does not exist" not in result.output
|
|
242
|
+
assert "coord acceptance mock" not in result.output
|
|
243
|
+
assert "rate limit" in result.output.lower()
|
|
244
|
+
assert "retry" in result.output.lower()
|
|
245
|
+
|
|
212
246
|
def test_unknown_repo_exits_two(self, config_file: Path, coord_db) -> None:
|
|
213
247
|
result = _run(config_file, ["--approved", "nope", "900"])
|
|
214
248
|
assert result.exit_code == 2
|
|
@@ -17,13 +17,18 @@ stays uncluttered — only a non-default backend earns the tag.
|
|
|
17
17
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
|
+
import logging
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
|
|
20
23
|
import coord.network as network_mod
|
|
24
|
+
import pytest
|
|
21
25
|
from click.testing import CliRunner
|
|
22
26
|
|
|
23
27
|
from coord.commands.status import status as status_cmd
|
|
24
28
|
from coord.models import Assignment, Board
|
|
25
29
|
from coord.network import MachineStatus, StatusResult
|
|
26
30
|
from coord.state import save_board
|
|
31
|
+
from tests.conftest import VALID_CONFIG
|
|
27
32
|
|
|
28
33
|
|
|
29
34
|
def _work(
|
|
@@ -188,3 +193,46 @@ def test_busy_line_omits_provider_when_absent(valid_config_path, monkeypatch) ->
|
|
|
188
193
|
)
|
|
189
194
|
assert result.exit_code == 0, result.output
|
|
190
195
|
assert "provider=" not in result.output, result.output
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
# ── #2305: tier-named providers.definitions must resolve, not degrade ──────
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
@pytest.fixture
|
|
202
|
+
def tier_provider_config_path(tmp_path: Path) -> Path:
|
|
203
|
+
"""`valid_config_path` plus a tier-named `providers.definitions` entry —
|
|
204
|
+
the real fleet shape #2305 is about (`oc-mid` etc.), not a builtin
|
|
205
|
+
provider *type* name."""
|
|
206
|
+
p = tmp_path / "coordinator.yml"
|
|
207
|
+
p.write_text(
|
|
208
|
+
VALID_CONFIG
|
|
209
|
+
+ "\nproviders:\n"
|
|
210
|
+
" definitions:\n"
|
|
211
|
+
" oc-mid:\n"
|
|
212
|
+
" type: opencode\n"
|
|
213
|
+
)
|
|
214
|
+
return p
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def test_status_resolves_tier_named_provider_without_warning(
|
|
218
|
+
tier_provider_config_path, monkeypatch, coord_db, caplog: pytest.LogCaptureFixture,
|
|
219
|
+
) -> None:
|
|
220
|
+
"""#2305 acceptance criterion: `coord status` against a board holding a
|
|
221
|
+
tier-named assignment (`oc-mid`, not a built-in `claude`/`claude-pty`/
|
|
222
|
+
`opencode` type name) must resolve the assignment's own provider
|
|
223
|
+
definition — no `get_provider: unknown provider_name` warning — because
|
|
224
|
+
`build_session_usage()` (feeding the burn-rate line) is now handed
|
|
225
|
+
`cfg`, which carries `providers.definitions`."""
|
|
226
|
+
save_board(Board(completed=[_work("w1", provider_name="oc-mid")]))
|
|
227
|
+
monkeypatch.setattr(network_mod, "check_all", lambda *a, **k: [])
|
|
228
|
+
runner = CliRunner()
|
|
229
|
+
with caplog.at_level(logging.WARNING, logger="coord.providers"):
|
|
230
|
+
result = runner.invoke(
|
|
231
|
+
status_cmd,
|
|
232
|
+
["--config", str(tier_provider_config_path)],
|
|
233
|
+
catch_exceptions=False,
|
|
234
|
+
)
|
|
235
|
+
assert result.exit_code == 0, result.output
|
|
236
|
+
assert not any(
|
|
237
|
+
"unknown provider_name" in r.message for r in caplog.records
|
|
238
|
+
), [r.message for r in caplog.records]
|