code-coordinator 0.5.272__tar.gz → 0.5.273__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.272 → code_coordinator-0.5.273}/.github/workflows/test.yml +58 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/PKG-INFO +3 -1
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/PKG-INFO +3 -1
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/requires.txt +3 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/sql.py +58 -18
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/pyproject.toml +11 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/backends.py +8 -10
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_sql_dialect.py +231 -17
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_sqlite_connect_ratchet.py +25 -4
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.gitignore +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/CLAUDE.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/GOAL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/LICENSE +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/MANIFEST.in +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/README.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/__init__.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agent.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/audit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/block_log.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/board_service.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/brain.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/claim.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/cli.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/client.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/comments.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/config.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dao.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/db.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deps.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/drive.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/events.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/filelock.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/freshness.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/gates.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/goal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/context.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/models.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/render.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/units.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/hooks.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/interactive.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/models.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/network.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notify.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/openapi.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/parentage.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/plans.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/progress.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/release_window.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/reports.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/review.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/self_health.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/smoke.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/split_work.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/state.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/test_author.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/test_report.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/usage.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/install-agent.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/setup.cfg +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/__init__.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/conftest.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_db.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_events.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_init.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_models.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_network.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_session.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_split.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_state.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/types/generated.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -320,3 +320,61 @@ jobs:
|
|
|
320
320
|
# the half of that check this repo can still make (the generator runs and
|
|
321
321
|
# covers every schema; the coord-web byte-comparison itself is that repo's
|
|
322
322
|
# own CI, per the paragraph above).
|
|
323
|
+
|
|
324
|
+
# #2886: a real Postgres 16 service, so `coord/sql.py`'s Postgres branches
|
|
325
|
+
# (paramstyle translation, upsert idioms, `information_schema`
|
|
326
|
+
# introspection, `RETURNING`, `dict_row`) — spoken since #2719 but never
|
|
327
|
+
# once executed against a real server — actually run against one, and so
|
|
328
|
+
# `COORD_TEST_BACKEND=postgres` (#2884's test-suite backend switch) means
|
|
329
|
+
# something in CI for the first time.
|
|
330
|
+
#
|
|
331
|
+
# SEPARATE JOB, not a `services:` block bolted onto `test` above, for two
|
|
332
|
+
# reasons: (1) the SQLite lane must stay exactly as fast and exactly as
|
|
333
|
+
# reliable as it is today — a Postgres service, even an unused one, is
|
|
334
|
+
# more CI surface for that job to depend on for zero benefit to the
|
|
335
|
+
# SQLite path; (2) `continue-on-error: true` below softens THIS job's
|
|
336
|
+
# conclusion without touching `test`'s at all. Running the whole suite
|
|
337
|
+
# (`coord_db` is autouse — see tests/conftest.py — so every one of ~400
|
|
338
|
+
# test files follows `COORD_TEST_BACKEND` for free) against a backend
|
|
339
|
+
# nothing has ever run it against is expected to be red for real,
|
|
340
|
+
# unrelated-to-this-PR reasons at first (coord/db.py's `_ensure_schema`
|
|
341
|
+
# and friends were written and only ever exercised against SQLite) — the
|
|
342
|
+
# harness-portability issue's deliverable is exactly that failure list.
|
|
343
|
+
# `continue-on-error: true` keeps this job's signal visible (its own
|
|
344
|
+
# conclusion is still pass/fail on the Checks tab) without blocking merges
|
|
345
|
+
# on it. Flip it off once that failure list is closed out.
|
|
346
|
+
#
|
|
347
|
+
# `psycopg` is an optional extra (`postgres`, this issue) — never a base
|
|
348
|
+
# or `[dev]` dependency (see `pyproject.toml`) — so installing it is this
|
|
349
|
+
# job's own opt-in `pip install -e ".[dev,postgres]"`, not a change to
|
|
350
|
+
# what every other job's `pip install -e ".[dev]"` pulls in.
|
|
351
|
+
postgres:
|
|
352
|
+
runs-on: ubuntu-latest
|
|
353
|
+
continue-on-error: true
|
|
354
|
+
services:
|
|
355
|
+
postgres:
|
|
356
|
+
image: postgres:16
|
|
357
|
+
env:
|
|
358
|
+
POSTGRES_PASSWORD: postgres
|
|
359
|
+
options: >-
|
|
360
|
+
--health-cmd pg_isready --health-interval 10s
|
|
361
|
+
--health-timeout 5s --health-retries 5
|
|
362
|
+
ports:
|
|
363
|
+
- 5432:5432
|
|
364
|
+
env:
|
|
365
|
+
COORD_TEST_BACKEND: postgres
|
|
366
|
+
# The default image's bootstrap database is named after POSTGRES_USER
|
|
367
|
+
# (postgres) since no POSTGRES_DB was set above — matches
|
|
368
|
+
# tests/backends.py's schema-per-test isolation, which needs CREATE on
|
|
369
|
+
# an existing database, not a database of its own.
|
|
370
|
+
COORD_TEST_POSTGRES_DSN: postgresql://postgres:postgres@localhost:5432/postgres
|
|
371
|
+
steps:
|
|
372
|
+
- uses: actions/checkout@v4
|
|
373
|
+
- uses: actions/setup-python@v5
|
|
374
|
+
with:
|
|
375
|
+
python-version: "3.12"
|
|
376
|
+
- run: pip install -e ".[dev,postgres]"
|
|
377
|
+
# #2180: same split as the `test` job above — the sealed acceptance
|
|
378
|
+
# suite is gated separately through the #2164 CI wrapper, not swept
|
|
379
|
+
# into this job's ordinary pytest run.
|
|
380
|
+
- run: pytest --ignore=tests/acceptance
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-coordinator
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.273
|
|
4
4
|
Summary: Coordinate Claude Code workers across multiple machines and repos.
|
|
5
5
|
Author-email: John Donaghy <johnfdonaghy@gmail.com>
|
|
6
6
|
License-Expression: LicenseRef-FSL-1.1-MIT
|
|
@@ -26,6 +26,8 @@ Requires-Dist: starlette>=0.37; extra == "server"
|
|
|
26
26
|
Requires-Dist: uvicorn>=0.30; extra == "server"
|
|
27
27
|
Requires-Dist: websockets>=12.0; extra == "server"
|
|
28
28
|
Requires-Dist: psutil>=5.9; extra == "server"
|
|
29
|
+
Provides-Extra: postgres
|
|
30
|
+
Requires-Dist: psycopg[binary]>=3.1; extra == "postgres"
|
|
29
31
|
Provides-Extra: all
|
|
30
32
|
Requires-Dist: code-coordinator[server]; extra == "all"
|
|
31
33
|
Provides-Extra: dev
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-coordinator
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.273
|
|
4
4
|
Summary: Coordinate Claude Code workers across multiple machines and repos.
|
|
5
5
|
Author-email: John Donaghy <johnfdonaghy@gmail.com>
|
|
6
6
|
License-Expression: LicenseRef-FSL-1.1-MIT
|
|
@@ -26,6 +26,8 @@ Requires-Dist: starlette>=0.37; extra == "server"
|
|
|
26
26
|
Requires-Dist: uvicorn>=0.30; extra == "server"
|
|
27
27
|
Requires-Dist: websockets>=12.0; extra == "server"
|
|
28
28
|
Requires-Dist: psutil>=5.9; extra == "server"
|
|
29
|
+
Provides-Extra: postgres
|
|
30
|
+
Requires-Dist: psycopg[binary]>=3.1; extra == "postgres"
|
|
29
31
|
Provides-Extra: all
|
|
30
32
|
Requires-Dist: code-coordinator[server]; extra == "all"
|
|
31
33
|
Provides-Extra: dev
|
|
@@ -71,6 +71,43 @@ class UnsupportedDialectError(ValueError):
|
|
|
71
71
|
"""Raised when a connection's driver module maps to no known dialect."""
|
|
72
72
|
|
|
73
73
|
|
|
74
|
+
#: What to tell a caller who hit a Postgres codepath without the extra
|
|
75
|
+
#: installed -- mirrors ``coord.commands._common.SERVER_EXTRA_INSTALL_HINT``'s
|
|
76
|
+
#: shape for the ``[server]`` extra.
|
|
77
|
+
POSTGRES_EXTRA_INSTALL_HINT = "pip install 'code-coordinator[postgres]'"
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _import_psycopg() -> Any:
|
|
81
|
+
"""Import ``psycopg``, translating its absence into an actionable message
|
|
82
|
+
(#2886).
|
|
83
|
+
|
|
84
|
+
``psycopg`` is an optional dependency -- the ``postgres`` extra -- never a
|
|
85
|
+
base or ``[dev]`` one (see ``pyproject.toml``'s ``[project.optional-
|
|
86
|
+
dependencies]``): every existing SQLite deployment must keep working
|
|
87
|
+
without ever pulling it in. Hitting this on an install that never asked
|
|
88
|
+
for Postgres is therefore the expected, common case, not a bug -- so
|
|
89
|
+
every Postgres call site in this module that needs the driver
|
|
90
|
+
(:func:`connect`, :func:`row_factory_for`, :func:`driver_error`) routes
|
|
91
|
+
its import through here rather than a bare ``import psycopg``, so the
|
|
92
|
+
failure names the extra to install instead of surfacing a raw
|
|
93
|
+
``ModuleNotFoundError: No module named 'psycopg'`` traceback.
|
|
94
|
+
|
|
95
|
+
:func:`driver_errors` deliberately does NOT route through here -- it
|
|
96
|
+
degrades silently to ``(sqlite3.Error,)`` when psycopg is absent (that is
|
|
97
|
+
its whole contract), so it keeps its own bare ``import psycopg`` inside a
|
|
98
|
+
caught ``try/except ImportError`` rather than raising through this
|
|
99
|
+
helper's message just to swallow it unread.
|
|
100
|
+
"""
|
|
101
|
+
try:
|
|
102
|
+
import psycopg # noqa: PLC0415 -- optional dep, see docstring
|
|
103
|
+
except ImportError as exc: # ModuleNotFoundError is a subclass
|
|
104
|
+
raise ModuleNotFoundError(
|
|
105
|
+
"the Postgres backend needs the `psycopg` driver, which is not "
|
|
106
|
+
f"installed. Install it with: {POSTGRES_EXTRA_INSTALL_HINT}"
|
|
107
|
+
) from exc
|
|
108
|
+
return psycopg
|
|
109
|
+
|
|
110
|
+
|
|
74
111
|
def detect_dialect(conn: Any) -> str:
|
|
75
112
|
"""Identify *conn*'s SQL dialect from its concrete connection type.
|
|
76
113
|
|
|
@@ -136,7 +173,7 @@ def connect(
|
|
|
136
173
|
superseded #2766 decision note.
|
|
137
174
|
|
|
138
175
|
**Postgres** (``dsn`` required): ``psycopg.connect(dsn)``. ``psycopg`` is
|
|
139
|
-
an optional dependency (see :func:`
|
|
176
|
+
an optional dependency (see :func:`_import_psycopg`) imported
|
|
140
177
|
function-locally, so calling this with ``backend=DIALECT_POSTGRES`` before
|
|
141
178
|
psycopg is installed raises ``ImportError``/``ModuleNotFoundError`` rather
|
|
142
179
|
than breaking import of this module for everyone else. *read_only* has no
|
|
@@ -157,7 +194,7 @@ def connect(
|
|
|
157
194
|
if backend == DIALECT_POSTGRES:
|
|
158
195
|
if not dsn:
|
|
159
196
|
raise ValueError("sql.connect(backend='postgres') requires dsn")
|
|
160
|
-
|
|
197
|
+
psycopg = _import_psycopg()
|
|
161
198
|
|
|
162
199
|
return psycopg.connect(dsn)
|
|
163
200
|
raise UnsupportedDialectError(backend)
|
|
@@ -348,19 +385,20 @@ def row_factory_for(dialect: str) -> Any:
|
|
|
348
385
|
|
|
349
386
|
``sqlite3.Row`` is returned directly (it's a base-dependency import,
|
|
350
387
|
already used throughout this tree). ``psycopg.rows.dict_row`` is
|
|
351
|
-
imported function-locally -- ``psycopg`` is
|
|
352
|
-
``
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
388
|
+
imported function-locally -- ``psycopg`` is an optional dependency (the
|
|
389
|
+
``postgres`` extra, #2886), never a base or ``[dev]`` one (see
|
|
390
|
+
``pyproject.toml``'s ``[project.optional-dependencies]``) -- so calling
|
|
391
|
+
this with :data:`DIALECT_POSTGRES` before the extra is installed raises
|
|
392
|
+
``ImportError``/``ModuleNotFoundError``, naming the extra to install
|
|
393
|
+
(see :func:`_import_psycopg`), rather than breaking import of this
|
|
394
|
+
module for everyone else.
|
|
358
395
|
"""
|
|
359
396
|
if dialect == DIALECT_SQLITE:
|
|
360
397
|
import sqlite3
|
|
361
398
|
|
|
362
399
|
return sqlite3.Row
|
|
363
400
|
if dialect == DIALECT_POSTGRES:
|
|
401
|
+
_import_psycopg() # translate a missing psycopg into an actionable message
|
|
364
402
|
from psycopg.rows import dict_row # noqa: PLC0415 -- optional dep, see docstring
|
|
365
403
|
|
|
366
404
|
return dict_row
|
|
@@ -615,7 +653,7 @@ def driver_error(conn: Any) -> type[BaseException]:
|
|
|
615
653
|
|
|
616
654
|
return sqlite3.Error
|
|
617
655
|
if dialect == DIALECT_POSTGRES:
|
|
618
|
-
|
|
656
|
+
psycopg = _import_psycopg()
|
|
619
657
|
|
|
620
658
|
return psycopg.Error
|
|
621
659
|
raise UnsupportedDialectError(dialect)
|
|
@@ -637,13 +675,15 @@ def driver_errors() -> tuple[type[BaseException], ...]:
|
|
|
637
675
|
instead of a retried write.
|
|
638
676
|
|
|
639
677
|
``sqlite3`` is a stdlib module -- always present, always included.
|
|
640
|
-
``psycopg`` is not a
|
|
641
|
-
so its absence is the normal case today, not an
|
|
642
|
-
``(sqlite3.Error,)`` rather than raising
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
678
|
+
``psycopg`` is an optional dependency, not a base or ``[dev]`` one (see
|
|
679
|
+
:func:`_import_psycopg`), so its absence is the normal case today, not an
|
|
680
|
+
error: this degrades to ``(sqlite3.Error,)`` rather than raising
|
|
681
|
+
``ImportError`` -- unlike every other Postgres call site in this module,
|
|
682
|
+
this one does NOT route through :func:`_import_psycopg` and its
|
|
683
|
+
actionable message, precisely because the message would just be
|
|
684
|
+
swallowed unread by the ``except ImportError`` below; there is no dialect
|
|
685
|
+
to detect at all here, so degrading silently (not even
|
|
686
|
+
function-local, deferred-import-style) is correct: a caller doing
|
|
647
687
|
``except sql.driver_errors():`` on a SQLite-only install must keep
|
|
648
688
|
behaving exactly as ``except sqlite3.OperationalError:`` always did.
|
|
649
689
|
|
|
@@ -656,7 +696,7 @@ def driver_errors() -> tuple[type[BaseException], ...]:
|
|
|
656
696
|
|
|
657
697
|
errors: list[type[BaseException]] = [sqlite3.Error]
|
|
658
698
|
try:
|
|
659
|
-
import psycopg # noqa: PLC0415 -- optional dep, see
|
|
699
|
+
import psycopg # noqa: PLC0415 -- optional dep, absence degrades silently, see docstring
|
|
660
700
|
except ImportError:
|
|
661
701
|
pass
|
|
662
702
|
else:
|
|
@@ -96,6 +96,17 @@ server = [
|
|
|
96
96
|
# Agent-side process/host metrics behind GET /metrics (coord/agent_app.py).
|
|
97
97
|
"psutil>=5.9",
|
|
98
98
|
]
|
|
99
|
+
# #2886: the Postgres driver for `coord/sql.py`'s dialect seam (#2719+).
|
|
100
|
+
# Optional and NEVER folded into `server`/`all`/`dev` below — every existing
|
|
101
|
+
# deployment runs SQLite and must keep working without ever pulling this in;
|
|
102
|
+
# adding it to a shared extra would make it a fleet-wide install change for
|
|
103
|
+
# zero benefit to anyone still on SQLite. `pip install 'code-coordinator[postgres]'`
|
|
104
|
+
# is the only way to get it. `coord/sql.py`'s Postgres call sites
|
|
105
|
+
# (`connect`/`row_factory_for`/`driver_error`) guard the import through
|
|
106
|
+
# `_import_psycopg()`, which names this extra in its error message rather
|
|
107
|
+
# than surfacing a bare `ModuleNotFoundError`; `tests/backends.py` does the
|
|
108
|
+
# same for the test suite's own `COORD_TEST_BACKEND=postgres` opt-in.
|
|
109
|
+
postgres = ["psycopg[binary]>=3.1"]
|
|
99
110
|
# Convenience alias: "give me everything a full node runs".
|
|
100
111
|
all = ["code-coordinator[server]"]
|
|
101
112
|
dev = [
|
|
@@ -151,22 +151,20 @@ def _next_schema_name() -> str:
|
|
|
151
151
|
def _import_psycopg() -> Any:
|
|
152
152
|
"""Import ``psycopg`` with an actionable message when it isn't installed.
|
|
153
153
|
|
|
154
|
-
``psycopg`` is
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
bare ``ModuleNotFoundError`` traceback out of a fixture.
|
|
154
|
+
``psycopg`` is an optional dependency — the ``postgres`` extra (#2886) —
|
|
155
|
+
never a base or ``[dev]`` one, so a plain ``pip install -e ".[dev]"``
|
|
156
|
+
does not pull it in. Selecting the Postgres backend without it is
|
|
157
|
+
therefore a normal, expected state that deserves a real explanation
|
|
158
|
+
rather than a bare ``ModuleNotFoundError`` traceback out of a fixture.
|
|
160
159
|
"""
|
|
161
160
|
try:
|
|
162
161
|
import psycopg # noqa: PLC0415 -- optional dep, see docstring
|
|
163
162
|
except ImportError as exc: # ModuleNotFoundError is a subclass
|
|
164
163
|
raise ModuleNotFoundError(
|
|
165
164
|
f"{BACKEND_ENV_VAR}={BACKEND_POSTGRES} was requested but the "
|
|
166
|
-
"`psycopg` driver is not installed. It is
|
|
167
|
-
"dependency
|
|
168
|
-
"
|
|
169
|
-
"`pip install 'psycopg[binary]'` and point "
|
|
165
|
+
"`psycopg` driver is not installed. It is an optional "
|
|
166
|
+
"dependency (the `postgres` extra, #2886) — install it with "
|
|
167
|
+
"`pip install 'code-coordinator[postgres]'` and point "
|
|
170
168
|
f"{DSN_ENV_VAR} at a reachable server "
|
|
171
169
|
f"(default: {DEFAULT_POSTGRES_DSN})."
|
|
172
170
|
) from exc
|
|
@@ -4,25 +4,39 @@ This module is a pure addition: nothing in the tree calls ``coord.sql`` yet
|
|
|
4
4
|
(that's Phase C slices 2-7 of #1948), so these tests exercise it directly
|
|
5
5
|
rather than through any existing call site.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
two ways: (1) dialect detection and SQL/param translation, which
|
|
10
|
-
*fake* connection class whose ``__module__`` claims to be
|
|
11
|
-
to capture exactly what would have reached a real driver
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
``psycopg`` is an optional dependency (the ``postgres`` extra, #2886) — most
|
|
8
|
+
runs of this suite still don't have it installed, so the Postgres path is
|
|
9
|
+
exercised two ways: (1) dialect detection and SQL/param translation, which
|
|
10
|
+
need only a *fake* connection class whose ``__module__`` claims to be
|
|
11
|
+
``psycopg``, spied to capture exactly what would have reached a real driver
|
|
12
|
+
(this needs no driver and no server — it is the bulk of this file, and it
|
|
13
|
+
still runs on every machine, every time); and (2), in the
|
|
14
|
+
"round trip against a real server" section near the bottom, actual
|
|
15
|
+
``psycopg`` + an actual Postgres 16 connection — the CI ``postgres`` job in
|
|
16
|
+
``.github/workflows/test.yml`` provides both. Those tests skip cleanly (not
|
|
17
|
+
error) when ``psycopg`` isn't installed or no server is reachable, via the
|
|
18
|
+
``pg_conn``/``real_postgres`` fixtures below, so a developer with neither
|
|
19
|
+
sees skips, not failures — proving #2886's whole point: every Postgres
|
|
20
|
+
branch coord.sql has ever emitted a fake-connection assertion for now also
|
|
21
|
+
has at least one assertion that it is *accepted* by a real server, not just
|
|
22
|
+
*shaped like* what one would accept.
|
|
14
23
|
"""
|
|
15
24
|
|
|
16
25
|
from __future__ import annotations
|
|
17
26
|
|
|
18
27
|
import ast
|
|
28
|
+
import os
|
|
19
29
|
import re
|
|
20
30
|
import sqlite3
|
|
31
|
+
import sys
|
|
32
|
+
import uuid
|
|
21
33
|
from pathlib import Path
|
|
34
|
+
from typing import Any, Iterator
|
|
22
35
|
|
|
23
36
|
import pytest
|
|
24
37
|
|
|
25
38
|
from coord import sql
|
|
39
|
+
from tests.backends import DSN_ENV_VAR, postgres_dsn
|
|
26
40
|
|
|
27
41
|
|
|
28
42
|
# ── fake Postgres-shaped connection (no real psycopg needed) ────────────────
|
|
@@ -171,10 +185,19 @@ def test_connect_postgres_requires_dsn():
|
|
|
171
185
|
sql.connect(backend=sql.DIALECT_POSTGRES)
|
|
172
186
|
|
|
173
187
|
|
|
174
|
-
def test_connect_postgres_without_psycopg_raises_import_error():
|
|
175
|
-
"""psycopg is
|
|
176
|
-
the honest failure mode for `backend="postgres"` with no
|
|
177
|
-
matching `row_factory_for`/`driver_error`'s posture for
|
|
188
|
+
def test_connect_postgres_without_psycopg_raises_import_error(monkeypatch):
|
|
189
|
+
"""``psycopg`` is an optional dependency (the ``postgres`` extra,
|
|
190
|
+
#2886) -- the honest failure mode for `backend="postgres"` with no
|
|
191
|
+
driver present, matching `row_factory_for`/`driver_error`'s posture for
|
|
192
|
+
the same gap.
|
|
193
|
+
|
|
194
|
+
``sys.modules["psycopg"] = None`` forces ``import psycopg`` to raise
|
|
195
|
+
``ImportError`` deterministically -- same technique
|
|
196
|
+
``tests/test_backend_selection.py`` uses -- so this passes identically
|
|
197
|
+
whether or not the CI job running it happens to have the `[postgres]`
|
|
198
|
+
extra installed (the ``postgres`` job in .github/workflows/test.yml
|
|
199
|
+
does, everything else doesn't)."""
|
|
200
|
+
monkeypatch.setitem(sys.modules, "psycopg", None)
|
|
178
201
|
with pytest.raises(ImportError):
|
|
179
202
|
sql.connect(backend=sql.DIALECT_POSTGRES, dsn="postgresql://user@host/db")
|
|
180
203
|
|
|
@@ -483,7 +506,10 @@ def test_row_factory_for_sqlite_is_sqlite_row():
|
|
|
483
506
|
assert sql.row_factory_for(sql.DIALECT_SQLITE) is sqlite3.Row
|
|
484
507
|
|
|
485
508
|
|
|
486
|
-
def test_row_factory_for_postgres_without_psycopg_raises_import_error():
|
|
509
|
+
def test_row_factory_for_postgres_without_psycopg_raises_import_error(monkeypatch):
|
|
510
|
+
"""See ``test_connect_postgres_without_psycopg_raises_import_error`` for
|
|
511
|
+
why this forces the absence rather than assuming it (#2886)."""
|
|
512
|
+
monkeypatch.setitem(sys.modules, "psycopg", None)
|
|
487
513
|
with pytest.raises(ImportError):
|
|
488
514
|
sql.row_factory_for(sql.DIALECT_POSTGRES)
|
|
489
515
|
|
|
@@ -641,7 +667,10 @@ def test_driver_error_catches_a_real_sqlite_operational_error(memdb):
|
|
|
641
667
|
memdb.execute("SELECT * FROM no_such_table")
|
|
642
668
|
|
|
643
669
|
|
|
644
|
-
def test_driver_error_postgres_without_psycopg_raises_import_error():
|
|
670
|
+
def test_driver_error_postgres_without_psycopg_raises_import_error(monkeypatch):
|
|
671
|
+
"""See ``test_connect_postgres_without_psycopg_raises_import_error`` for
|
|
672
|
+
why this forces the absence rather than assuming it (#2886)."""
|
|
673
|
+
monkeypatch.setitem(sys.modules, "psycopg", None)
|
|
645
674
|
conn = _FakePostgresConnection()
|
|
646
675
|
with pytest.raises(ImportError):
|
|
647
676
|
sql.driver_error(conn)
|
|
@@ -657,12 +686,16 @@ def test_driver_error_unknown_dialect_raises():
|
|
|
657
686
|
# Unlike driver_error(conn), this needs no connection -- it's for the ~18
|
|
658
687
|
# call sites wrapping a retry_on_locked(...) call (or another write with no
|
|
659
688
|
# connection in scope) that used to hardcode `except sqlite3.OperationalError:`,
|
|
660
|
-
# going silently inert under Postgres. psycopg is
|
|
661
|
-
# (
|
|
662
|
-
# raising ImportError is the case actually
|
|
689
|
+
# going silently inert under Postgres. psycopg is an optional dependency
|
|
690
|
+
# (#2886) that most runs of this suite don't have installed, so degrading to
|
|
691
|
+
# (sqlite3.Error,) rather than raising ImportError is the case actually
|
|
692
|
+
# under test here -- forced deterministically below rather than assumed, so
|
|
693
|
+
# this test still passes in the one CI job that DOES have the `[postgres]`
|
|
694
|
+
# extra installed (`postgres` in .github/workflows/test.yml).
|
|
663
695
|
|
|
664
696
|
|
|
665
|
-
def test_driver_errors_degrades_to_sqlite_only_when_psycopg_absent():
|
|
697
|
+
def test_driver_errors_degrades_to_sqlite_only_when_psycopg_absent(monkeypatch):
|
|
698
|
+
monkeypatch.setitem(sys.modules, "psycopg", None)
|
|
666
699
|
assert sql.driver_errors() == (sqlite3.Error,)
|
|
667
700
|
|
|
668
701
|
|
|
@@ -750,6 +783,187 @@ def test_is_lock_contention_error_false_for_unrelated_exception_with_no_sqlstate
|
|
|
750
783
|
assert is_lock_contention_error(ValueError("not a DB error at all")) is False
|
|
751
784
|
|
|
752
785
|
|
|
786
|
+
# ── round trip against a real server (#2886) ────────────────────────────────
|
|
787
|
+
#
|
|
788
|
+
# Everything above proves what SQL text/params coord.sql *would* send to a
|
|
789
|
+
# real driver, using a fake connection whose __module__ merely claims to be
|
|
790
|
+
# "psycopg" (see the module docstring). None of it proves Postgres *accepts*
|
|
791
|
+
# that text -- coord/sql.py has spoken Postgres since #2719 and none of its
|
|
792
|
+
# Postgres branches had ever executed against a real server before this
|
|
793
|
+
# section existed. These tests fill that gap for the branches #2886 calls
|
|
794
|
+
# out by name: execute/executemany translation, upsert, insert_ignore,
|
|
795
|
+
# insert_returning_id's RETURNING path, table_columns against
|
|
796
|
+
# information_schema, apply_row_factory's dict_row, and
|
|
797
|
+
# autoincrement_pk_ddl's identity-column DDL actually creating a table.
|
|
798
|
+
#
|
|
799
|
+
# `psycopg` is an optional dependency (the `postgres` extra) and most runs of
|
|
800
|
+
# this suite have neither it nor a reachable server -- both the driver import
|
|
801
|
+
# and the connection attempt below skip cleanly (pytest.importorskip /
|
|
802
|
+
# pytest.skip) rather than raising, so `pytest tests/test_sql_dialect.py`
|
|
803
|
+
# with no Postgres anywhere behaves exactly as it did before this section
|
|
804
|
+
# existed: skips, not errors, and NOT gated on `COORD_TEST_BACKEND` (these
|
|
805
|
+
# tests must skip cleanly under the suite's default, unset backend too, not
|
|
806
|
+
# just under an explicit non-`postgres` selection). CI's `postgres` job in
|
|
807
|
+
# .github/workflows/test.yml provides both, and reuses tests/backends.py's
|
|
808
|
+
# `COORD_TEST_POSTGRES_DSN` (#2884) so a developer or CI run only ever needs
|
|
809
|
+
# to set the one env var to make both that harness and these targeted tests
|
|
810
|
+
# exercise the same server.
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
def _require_psycopg() -> Any:
|
|
814
|
+
return pytest.importorskip(
|
|
815
|
+
"psycopg",
|
|
816
|
+
reason="psycopg not installed -- pip install 'code-coordinator[postgres]'",
|
|
817
|
+
)
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
@pytest.fixture
|
|
821
|
+
def pg_conn() -> Iterator[Any]:
|
|
822
|
+
"""A real ``psycopg`` connection, opened through :func:`sql.connect` (the
|
|
823
|
+
#827 connection factory, so that factory itself is exercised for real
|
|
824
|
+
too) -- in its own private schema, dropped on teardown.
|
|
825
|
+
|
|
826
|
+
Schema-per-test, the same isolation strategy ``tests/backends.py`` uses
|
|
827
|
+
for the whole suite's own Postgres opt-in (#2884) -- a small,
|
|
828
|
+
self-contained copy rather than reaching into that module's private
|
|
829
|
+
``_open_postgres`` helper, because this fixture has a different
|
|
830
|
+
contract: it must skip cleanly under the suite's *default*
|
|
831
|
+
``COORD_TEST_BACKEND`` (unset, i.e. SQLite), not just under an explicit
|
|
832
|
+
``postgres`` selection -- see the section header above.
|
|
833
|
+
|
|
834
|
+
Row factory is left at psycopg's default (tuple rows) -- matching
|
|
835
|
+
``sqlite3``'s own default, which the ``memdb`` fixture above relies on
|
|
836
|
+
-- so a test that cares about ``dict_row`` calls
|
|
837
|
+
:func:`sql.apply_row_factory` itself, the same way
|
|
838
|
+
``test_apply_row_factory_makes_rows_dict_accessible`` does for SQLite.
|
|
839
|
+
"""
|
|
840
|
+
_require_psycopg()
|
|
841
|
+
dsn = postgres_dsn()
|
|
842
|
+
try:
|
|
843
|
+
conn = sql.connect(backend=sql.DIALECT_POSTGRES, dsn=dsn)
|
|
844
|
+
except Exception as exc: # noqa: BLE001 -- any connect failure is a skip, not a failure
|
|
845
|
+
pytest.skip(f"Postgres not reachable at {dsn!r} ({DSN_ENV_VAR}): {exc}")
|
|
846
|
+
schema = f"coord_sql_dialect_test_{os.getpid()}_{uuid.uuid4().hex[:8]}"
|
|
847
|
+
with conn.cursor() as cur:
|
|
848
|
+
cur.execute(f'CREATE SCHEMA "{schema}"')
|
|
849
|
+
# search_path is a session setting, so every later statement on this
|
|
850
|
+
# connection resolves unqualified table names into the private
|
|
851
|
+
# schema without any test needing to know it exists.
|
|
852
|
+
cur.execute(f'SET search_path TO "{schema}"')
|
|
853
|
+
conn.commit()
|
|
854
|
+
try:
|
|
855
|
+
yield conn
|
|
856
|
+
finally:
|
|
857
|
+
conn.rollback()
|
|
858
|
+
with conn.cursor() as cur:
|
|
859
|
+
cur.execute("SET search_path TO public")
|
|
860
|
+
cur.execute(f'DROP SCHEMA IF EXISTS "{schema}" CASCADE')
|
|
861
|
+
conn.commit()
|
|
862
|
+
conn.close()
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
def test_detect_dialect_real_postgres_connection(pg_conn):
|
|
866
|
+
assert sql.detect_dialect(pg_conn) == sql.DIALECT_POSTGRES
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
def test_connect_postgres_round_trip_opens_a_working_connection(pg_conn):
|
|
870
|
+
""":func:`sql.connect` itself (#827), not just its ``ImportError`` guard
|
|
871
|
+
(already covered above) -- ``pg_conn`` opened through it; this proves
|
|
872
|
+
the result is a live, usable connection."""
|
|
873
|
+
cur = sql.execute(pg_conn, "SELECT 1")
|
|
874
|
+
assert cur.fetchone() == (1,)
|
|
875
|
+
|
|
876
|
+
|
|
877
|
+
def test_execute_and_executemany_round_trip_against_real_postgres(pg_conn):
|
|
878
|
+
sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
|
|
879
|
+
sql.execute(pg_conn, "INSERT INTO t (id, a, b) VALUES (?, ?, ?)", (1, "x", "y"))
|
|
880
|
+
sql.executemany(
|
|
881
|
+
pg_conn,
|
|
882
|
+
"INSERT INTO t (id, a, b) VALUES (?, ?, ?)",
|
|
883
|
+
[(2, "p", "q"), (3, "r", "s")],
|
|
884
|
+
)
|
|
885
|
+
pg_conn.commit()
|
|
886
|
+
cur = sql.execute(pg_conn, "SELECT id, a, b FROM t ORDER BY id")
|
|
887
|
+
assert cur.fetchall() == [(1, "x", "y"), (2, "p", "q"), (3, "r", "s")]
|
|
888
|
+
|
|
889
|
+
|
|
890
|
+
def test_execute_preserves_literal_question_mark_against_real_postgres(pg_conn):
|
|
891
|
+
sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
|
|
892
|
+
sql.execute(pg_conn, "INSERT INTO t (id, a, b) VALUES (?, ?, ?)", (1, "why?", "z"))
|
|
893
|
+
pg_conn.commit()
|
|
894
|
+
cur = sql.execute(pg_conn, "SELECT a FROM t WHERE b = ? AND a = 'why?'", ("z",))
|
|
895
|
+
assert cur.fetchone() == ("why?",)
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
def test_upsert_round_trips_against_real_postgres(pg_conn):
|
|
899
|
+
sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
|
|
900
|
+
pg_conn.commit()
|
|
901
|
+
sql.upsert(pg_conn, "t", ["id", "a", "b"], (1, "first", "y"), conflict_columns=["id"])
|
|
902
|
+
pg_conn.commit()
|
|
903
|
+
sql.upsert(pg_conn, "t", ["id", "a", "b"], (1, "second", "z"), conflict_columns=["id"])
|
|
904
|
+
pg_conn.commit()
|
|
905
|
+
cur = sql.execute(pg_conn, "SELECT a, b FROM t WHERE id = ?", (1,))
|
|
906
|
+
assert cur.fetchone() == ("second", "z")
|
|
907
|
+
assert sql.execute(pg_conn, "SELECT COUNT(*) FROM t").fetchone() == (1,)
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
def test_insert_ignore_round_trips_against_real_postgres(pg_conn):
|
|
911
|
+
sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT)")
|
|
912
|
+
pg_conn.commit()
|
|
913
|
+
sql.insert_ignore(pg_conn, "t", ["id", "a"], (1, "first"))
|
|
914
|
+
pg_conn.commit()
|
|
915
|
+
sql.insert_ignore(pg_conn, "t", ["id", "a"], (1, "second"))
|
|
916
|
+
pg_conn.commit()
|
|
917
|
+
cur = sql.execute(pg_conn, "SELECT a FROM t WHERE id = ?", (1,))
|
|
918
|
+
assert cur.fetchone() == ("first",)
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
def test_insert_returning_id_round_trips_against_real_postgres(pg_conn):
|
|
922
|
+
ddl = sql.autoincrement_pk_ddl(sql.DIALECT_POSTGRES)
|
|
923
|
+
sql.execute(pg_conn, f"CREATE TABLE t (id {ddl}, a TEXT)")
|
|
924
|
+
pg_conn.commit()
|
|
925
|
+
new_id = sql.insert_returning_id(pg_conn, "INSERT INTO t (a) VALUES (?)", ("x",))
|
|
926
|
+
pg_conn.commit()
|
|
927
|
+
assert isinstance(new_id, int)
|
|
928
|
+
cur = sql.execute(pg_conn, "SELECT a FROM t WHERE id = ?", (new_id,))
|
|
929
|
+
assert cur.fetchone() == ("x",)
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
def test_table_columns_round_trips_against_real_information_schema(pg_conn):
|
|
933
|
+
sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
|
|
934
|
+
pg_conn.commit()
|
|
935
|
+
columns = sql.table_columns(pg_conn, "t")
|
|
936
|
+
assert [name for name, _type in columns] == ["id", "a", "b"]
|
|
937
|
+
|
|
938
|
+
|
|
939
|
+
def test_table_columns_round_trips_empty_for_missing_table_against_real_postgres(pg_conn):
|
|
940
|
+
assert sql.table_columns(pg_conn, "no_such_table") == []
|
|
941
|
+
|
|
942
|
+
|
|
943
|
+
def test_apply_row_factory_dict_row_round_trips_against_real_postgres(pg_conn):
|
|
944
|
+
sql.apply_row_factory(pg_conn)
|
|
945
|
+
sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
|
|
946
|
+
sql.execute(pg_conn, "INSERT INTO t (id, a, b) VALUES (?, ?, ?)", (1, "x", "y"))
|
|
947
|
+
pg_conn.commit()
|
|
948
|
+
row = sql.execute(pg_conn, "SELECT a, b FROM t WHERE id = ?", (1,)).fetchone()
|
|
949
|
+
assert row["a"] == "x"
|
|
950
|
+
assert row["b"] == "y"
|
|
951
|
+
|
|
952
|
+
|
|
953
|
+
def test_autoincrement_pk_ddl_round_trips_against_real_postgres(pg_conn):
|
|
954
|
+
"""The identity-column DDL fragment actually creating a table and
|
|
955
|
+
actually generating monotonic ids -- this branch is pure DDL text with
|
|
956
|
+
no dedicated round trip other than using it exactly as coord/db.py
|
|
957
|
+
does: substituted into a CREATE TABLE and then inserted through."""
|
|
958
|
+
ddl = sql.autoincrement_pk_ddl(sql.DIALECT_POSTGRES)
|
|
959
|
+
sql.execute(pg_conn, f"CREATE TABLE t (id {ddl}, a TEXT)")
|
|
960
|
+
pg_conn.commit()
|
|
961
|
+
first = sql.insert_returning_id(pg_conn, "INSERT INTO t (a) VALUES (?)", ("x",))
|
|
962
|
+
second = sql.insert_returning_id(pg_conn, "INSERT INTO t (a) VALUES (?)", ("y",))
|
|
963
|
+
pg_conn.commit()
|
|
964
|
+
assert second == first + 1
|
|
965
|
+
|
|
966
|
+
|
|
753
967
|
# ── the ratchet: no raw `?` reaches a driver outside the seam (#2768, #1948) ─
|
|
754
968
|
#
|
|
755
969
|
# #1948's first acceptance bullet: "No raw `?` placeholder reaches a driver:
|