code-coordinator 0.5.306__tar.gz → 0.5.308__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.306 → code_coordinator-0.5.308}/PKG-INFO +1 -1
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/status.py +44 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dispatch.py +9 -4
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/fleet_config_health.py +164 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/models.py +44 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/review.py +58 -0
- code_coordinator-0.5.308/tests/test_cli_diagnose_test_coverage.py +153 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dispatch.py +31 -2
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fleet_config_health.py +163 -1
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_models.py +41 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_operational_defaults.py +6 -2
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review.py +110 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/.gitignore +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/CLAUDE.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/GOAL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/LICENSE +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/MANIFEST.in +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/README.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/__init__.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agent.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/audit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/block_log.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/board_service.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/brain.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/claim.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/cli.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/client.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/comments.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/config.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dao.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/db.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/deps.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/drive.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/events.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/filelock.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/freshness.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/gates.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/goal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/context.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/models.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/render.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/health/units.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/hooks.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/interactive.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/network.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/notify.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/openapi.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/parentage.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/plans.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/progress.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/release_window.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/reports.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/self_health.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/smoke.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/split_work.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/sql.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/state.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/test_author.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/test_report.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/usage.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/install-agent.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/pyproject.toml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/setup.cfg +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/__init__.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/backends.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/conftest.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_db.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_events.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_init.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_network.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_session.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_split.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_state.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.306 → code_coordinator-0.5.308}/tests/write_parity.py +0 -0
|
@@ -445,6 +445,7 @@ tests/test_cli_diagnose_config_provenance.py
|
|
|
445
445
|
tests/test_cli_diagnose_forge_availability.py
|
|
446
446
|
tests/test_cli_diagnose_graph.py
|
|
447
447
|
tests/test_cli_diagnose_self.py
|
|
448
|
+
tests/test_cli_diagnose_test_coverage.py
|
|
448
449
|
tests/test_cli_doctor.py
|
|
449
450
|
tests/test_cli_doctor_config_free_1801.py
|
|
450
451
|
tests/test_cli_doctor_config_mismatch_1712.py
|
{code_coordinator-0.5.306 → code_coordinator-0.5.308}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -471,6 +471,7 @@
|
|
|
471
471
|
"tests/test_cli_diagnose_forge_availability.py",
|
|
472
472
|
"tests/test_cli_diagnose_graph.py",
|
|
473
473
|
"tests/test_cli_diagnose_self.py",
|
|
474
|
+
"tests/test_cli_diagnose_test_coverage.py",
|
|
474
475
|
"tests/test_cli_doctor.py",
|
|
475
476
|
"tests/test_cli_doctor_config_free_1801.py",
|
|
476
477
|
"tests/test_cli_doctor_config_mismatch_1712.py",
|
|
@@ -1921,6 +1921,21 @@ def _diagnose_via_daemon(svc, params: dict) -> None:
|
|
|
1921
1921
|
"network required."
|
|
1922
1922
|
),
|
|
1923
1923
|
)
|
|
1924
|
+
@click.option(
|
|
1925
|
+
"--test-coverage",
|
|
1926
|
+
"test_coverage_check",
|
|
1927
|
+
is_flag=True,
|
|
1928
|
+
help=(
|
|
1929
|
+
"#2967: report repos whose effective Test-stage command (same "
|
|
1930
|
+
"ci_command > smoke_tests.default_command > test_command precedence "
|
|
1931
|
+
"the Test gate itself uses) enables fewer cargo `--features` than "
|
|
1932
|
+
"the repo's build_command — e.g. quadraui building "
|
|
1933
|
+
"tui+gtk+terminal but testing only tui, so a `passed` verdict never "
|
|
1934
|
+
"compiled the gtk/terminal code. Repos with no explicit "
|
|
1935
|
+
"`--features` on either side are silently skipped (no signal). "
|
|
1936
|
+
"Read-only, no checkout or network required."
|
|
1937
|
+
),
|
|
1938
|
+
)
|
|
1924
1939
|
@click.option(
|
|
1925
1940
|
"--self",
|
|
1926
1941
|
"self_check",
|
|
@@ -1980,6 +1995,7 @@ def diagnose(
|
|
|
1980
1995
|
graph_health: bool = False,
|
|
1981
1996
|
config_provenance_check: bool = False,
|
|
1982
1997
|
capability_rules_check: bool = False,
|
|
1998
|
+
test_coverage_check: bool = False,
|
|
1983
1999
|
self_check: bool = False,
|
|
1984
2000
|
self_no_fetch: bool = False,
|
|
1985
2001
|
forge_availability: bool = False,
|
|
@@ -2006,6 +2022,11 @@ def diagnose(
|
|
|
2006
2022
|
_diagnose_capability_rules(config_path)
|
|
2007
2023
|
return
|
|
2008
2024
|
|
|
2025
|
+
# ── #2967: test_command feature-flag coverage vs build_command ──────────
|
|
2026
|
+
if test_coverage_check:
|
|
2027
|
+
_diagnose_test_coverage(config_path)
|
|
2028
|
+
return
|
|
2029
|
+
|
|
2009
2030
|
# ── #2436: THIS process's own editable coord install freshness ──────────
|
|
2010
2031
|
if self_check:
|
|
2011
2032
|
_diagnose_self(fetch=not self_no_fetch)
|
|
@@ -2236,6 +2257,29 @@ def _diagnose_capability_rules(config_path: Path) -> None:
|
|
|
2236
2257
|
click.echo(capability_rule_summary_line(findings, unclaimed))
|
|
2237
2258
|
|
|
2238
2259
|
|
|
2260
|
+
def _diagnose_test_coverage(config_path: Path) -> None:
|
|
2261
|
+
"""Report repos whose effective Test-stage command enables fewer cargo
|
|
2262
|
+
``--features`` than their ``build_command`` (#2967).
|
|
2263
|
+
|
|
2264
|
+
Read-only, local-machine only, same family as ``--capability-rules``.
|
|
2265
|
+
Unlike ``--capability-rules`` this needs no repo checkout at all — it's
|
|
2266
|
+
a pure comparison of two command strings already in ``coordinator.yml``
|
|
2267
|
+
— so it reports identically wherever it's run, including a thin client
|
|
2268
|
+
with no local checkouts (see ``coord/fleet_config_health.py``).
|
|
2269
|
+
"""
|
|
2270
|
+
from coord.fleet_config_health import ( # noqa: PLC0415
|
|
2271
|
+
feature_coverage_findings,
|
|
2272
|
+
feature_coverage_summary_line,
|
|
2273
|
+
format_feature_coverage_lines,
|
|
2274
|
+
)
|
|
2275
|
+
|
|
2276
|
+
cfg = _load_config(config_path)
|
|
2277
|
+
findings = feature_coverage_findings(cfg)
|
|
2278
|
+
for line in format_feature_coverage_lines(findings):
|
|
2279
|
+
click.echo(f" {line}")
|
|
2280
|
+
click.echo(feature_coverage_summary_line(findings))
|
|
2281
|
+
|
|
2282
|
+
|
|
2239
2283
|
def _diagnose_self(*, fetch: bool) -> None:
|
|
2240
2284
|
"""Report whether THIS process's own editable ``coord`` install is
|
|
2241
2285
|
behind origin (#2436).
|
|
@@ -17,7 +17,7 @@ from coord.comments import (
|
|
|
17
17
|
format_refused_policy,
|
|
18
18
|
)
|
|
19
19
|
from coord.config import Config
|
|
20
|
-
from coord.models import Proposal, Repo
|
|
20
|
+
from coord.models import Proposal, Repo, coordinator_owned_docs
|
|
21
21
|
|
|
22
22
|
AGENT_PORT = 7433
|
|
23
23
|
|
|
@@ -582,9 +582,14 @@ def dispatch(
|
|
|
582
582
|
deny_commands = repo.worker_permissions.deny
|
|
583
583
|
|
|
584
584
|
# Resolve coordinator-only files (workers must not read or modify these).
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
585
|
+
# #2966: coordinator_only_files was set by zero repos fleet-wide, so this
|
|
586
|
+
# started empty for every work dispatch and only ever grew sealed
|
|
587
|
+
# acceptance paths below — never a doc. coordinator_owned_docs() unions
|
|
588
|
+
# in a fleet-wide default (the repo's own CLAUDE.md) regardless of
|
|
589
|
+
# whether coordinator_only_files is configured, so "only the coordinator
|
|
590
|
+
# writes docs" is enforced (advisory, like every non-oracle
|
|
591
|
+
# files_forbidden entry) without depending on 10 repos' worth of config.
|
|
592
|
+
files_forbidden: list[str] = coordinator_owned_docs(repo)
|
|
588
593
|
|
|
589
594
|
# #944 sealing v1 (docs/ORACLE_LOOP.md): the acceptance oracle is
|
|
590
595
|
# read-only/run-only for the worker — it's authored by an independent
|
|
@@ -57,6 +57,7 @@ precedent as :func:`config_provenance` applies per repo.
|
|
|
57
57
|
from __future__ import annotations
|
|
58
58
|
|
|
59
59
|
import os
|
|
60
|
+
import shlex
|
|
60
61
|
import subprocess
|
|
61
62
|
from dataclasses import dataclass, field
|
|
62
63
|
from pathlib import Path
|
|
@@ -615,3 +616,166 @@ def capability_rule_summary_line(
|
|
|
615
616
|
f"prefixes={len(findings)} dead={dead} partial={partial} "
|
|
616
617
|
f"unclaimed_caps={len(unclaimed)}"
|
|
617
618
|
)
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
# ── Test-command feature-flag coverage vs build_command (#2967) ─────────────
|
|
622
|
+
#
|
|
623
|
+
# quadraui is configured `test_command: cargo test --features tui` against
|
|
624
|
+
# `build_command: cargo build --features tui --features gtk --features
|
|
625
|
+
# terminal` — the Test gate never compiles `src/gtk/**` or the terminal
|
|
626
|
+
# backend, so a `passed` verdict on a change confined to either carries no
|
|
627
|
+
# information at all. Nothing previously compared the two commands; this is
|
|
628
|
+
# the same "config looks right in review but silently does less than it
|
|
629
|
+
# claims" shape as #2953's dead capability_rules prefixes, one seam over:
|
|
630
|
+
# there it was a `files` prefix matching nothing, here it's a `--features`
|
|
631
|
+
# flag the build enables that the effective Test-stage command never turns
|
|
632
|
+
# on. Pure string comparison against the already-loaded config — no local
|
|
633
|
+
# checkout required, so (unlike `capability_rule_health`) this runs the same
|
|
634
|
+
# everywhere, including a thin client with no repo checkouts at all.
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
def _cargo_features(command: str | None) -> set[str]:
|
|
638
|
+
"""Every value named by a `--features`/`-F`/`--features=...` token in
|
|
639
|
+
*command*, comma- or space-separated, deduped.
|
|
640
|
+
|
|
641
|
+
Returns the empty set for a falsy, unparseable (unbalanced quoting), or
|
|
642
|
+
feature-less command — treated as "no feature-flag signal to compare",
|
|
643
|
+
never as a gap by itself. That is what keeps a plain `cargo build` /
|
|
644
|
+
`cargo test` pair (vimcode, coord-tui) and non-cargo commands (npm/pnpm
|
|
645
|
+
repos) out of the findings entirely: both sides parse to an empty set,
|
|
646
|
+
which is equal, not missing.
|
|
647
|
+
"""
|
|
648
|
+
if not command:
|
|
649
|
+
return set()
|
|
650
|
+
try:
|
|
651
|
+
tokens = shlex.split(command)
|
|
652
|
+
except ValueError:
|
|
653
|
+
return set()
|
|
654
|
+
features: set[str] = set()
|
|
655
|
+
i = 0
|
|
656
|
+
while i < len(tokens):
|
|
657
|
+
tok = tokens[i]
|
|
658
|
+
value: str | None = None
|
|
659
|
+
if tok in ("--features", "-F"):
|
|
660
|
+
if i + 1 < len(tokens):
|
|
661
|
+
value = tokens[i + 1]
|
|
662
|
+
i += 1
|
|
663
|
+
elif tok.startswith("--features="):
|
|
664
|
+
value = tok[len("--features=") :]
|
|
665
|
+
if value is not None:
|
|
666
|
+
features.update(part for part in value.replace(",", " ").split() if part)
|
|
667
|
+
i += 1
|
|
668
|
+
return features
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
@dataclass
|
|
672
|
+
class FeatureCoverageFinding:
|
|
673
|
+
"""Feature-flag coverage of one repo's effective Test-stage command
|
|
674
|
+
against its ``build_command`` (#2967).
|
|
675
|
+
|
|
676
|
+
``effective_test_command``/``test_command_source``/``ci_equivalent``
|
|
677
|
+
mirror ``coord.smoke.resolve_smoke_command`` — the SAME precedence
|
|
678
|
+
(``ci_command`` > ``smoke_tests.default_command`` > ``test_command``)
|
|
679
|
+
the Test stage itself uses, so this reports on the command that will
|
|
680
|
+
actually gate the repo, not always the raw ``repos[].test_command``.
|
|
681
|
+
"""
|
|
682
|
+
|
|
683
|
+
repo: str
|
|
684
|
+
build_command: str
|
|
685
|
+
effective_test_command: str | None
|
|
686
|
+
test_command_source: str
|
|
687
|
+
ci_equivalent: bool
|
|
688
|
+
build_features: tuple[str, ...] = ()
|
|
689
|
+
test_features: tuple[str, ...] = ()
|
|
690
|
+
missing_features: tuple[str, ...] = ()
|
|
691
|
+
|
|
692
|
+
@property
|
|
693
|
+
def gap(self) -> bool:
|
|
694
|
+
"""``build_command`` enables a feature the effective test command
|
|
695
|
+
never turns on — a passed verdict didn't compile that code."""
|
|
696
|
+
return bool(self.missing_features)
|
|
697
|
+
|
|
698
|
+
@property
|
|
699
|
+
def healthy(self) -> bool:
|
|
700
|
+
return not self.gap
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
def feature_coverage_findings(config: "Config") -> list[FeatureCoverageFinding]:
|
|
704
|
+
"""Cargo `--features` coverage of every configured repo's effective
|
|
705
|
+
Test-stage command against its ``build_command`` (#2967).
|
|
706
|
+
|
|
707
|
+
Only repos whose ``build_command`` names at least one `--features` value
|
|
708
|
+
are considered — a repo with no explicit features (or a non-cargo build,
|
|
709
|
+
e.g. npm/pnpm) parses to an empty set on both sides and is silently
|
|
710
|
+
omitted, matching :func:`capability_rule_health`'s "no signal, no
|
|
711
|
+
finding" precedent. The effective test command is resolved with
|
|
712
|
+
``coord.smoke.resolve_smoke_command`` (deferred import: `coord.smoke`
|
|
713
|
+
pulls in ``httpx``/``github_ops``, which this otherwise-light,
|
|
714
|
+
network-free module avoids at import time), so a repo that already
|
|
715
|
+
covers the gap via ``ci_command`` or ``smoke_tests.default_command``
|
|
716
|
+
correctly reports healthy rather than flagging the raw
|
|
717
|
+
``test_command`` alone.
|
|
718
|
+
"""
|
|
719
|
+
from coord.smoke import resolve_smoke_command # noqa: PLC0415
|
|
720
|
+
|
|
721
|
+
findings: list[FeatureCoverageFinding] = []
|
|
722
|
+
for repo_cfg in config.repos:
|
|
723
|
+
build_command = repo_cfg.build_command
|
|
724
|
+
if not build_command:
|
|
725
|
+
continue
|
|
726
|
+
build_features = _cargo_features(build_command)
|
|
727
|
+
if not build_features:
|
|
728
|
+
continue
|
|
729
|
+
smoke_cmd = resolve_smoke_command(repo_cfg, config.smoke_tests)
|
|
730
|
+
test_features = _cargo_features(smoke_cmd.command)
|
|
731
|
+
missing = tuple(sorted(build_features - test_features))
|
|
732
|
+
findings.append(
|
|
733
|
+
FeatureCoverageFinding(
|
|
734
|
+
repo=repo_cfg.name,
|
|
735
|
+
build_command=build_command,
|
|
736
|
+
effective_test_command=smoke_cmd.command,
|
|
737
|
+
test_command_source=smoke_cmd.source,
|
|
738
|
+
ci_equivalent=smoke_cmd.ci_equivalent,
|
|
739
|
+
build_features=tuple(sorted(build_features)),
|
|
740
|
+
test_features=tuple(sorted(test_features)),
|
|
741
|
+
missing_features=missing,
|
|
742
|
+
)
|
|
743
|
+
)
|
|
744
|
+
return findings
|
|
745
|
+
|
|
746
|
+
|
|
747
|
+
def format_feature_coverage_lines(findings: list[FeatureCoverageFinding]) -> list[str]:
|
|
748
|
+
"""Human-readable report lines for *findings* (used by ``coord diagnose
|
|
749
|
+
--test-coverage``)."""
|
|
750
|
+
if not findings:
|
|
751
|
+
return [
|
|
752
|
+
"· no repo's build_command names an explicit `--features` value "
|
|
753
|
+
"— nothing to check (this only applies to cargo feature-flagged "
|
|
754
|
+
"builds)"
|
|
755
|
+
]
|
|
756
|
+
|
|
757
|
+
lines: list[str] = []
|
|
758
|
+
for f in findings:
|
|
759
|
+
if f.gap:
|
|
760
|
+
lines.append(
|
|
761
|
+
f"✗ GAP: {f.repo} — build_command (`{f.build_command}`) enables "
|
|
762
|
+
f"[{', '.join(f.build_features)}], but the effective Test-stage "
|
|
763
|
+
f"command ({f.test_command_source}: "
|
|
764
|
+
f"`{f.effective_test_command or '(unconfigured)'}`) enables "
|
|
765
|
+
f"[{', '.join(f.test_features) or '(none)'}]. Missing: "
|
|
766
|
+
f"{', '.join(f.missing_features)} — a `passed` verdict never "
|
|
767
|
+
"compiled that code (#2967)."
|
|
768
|
+
)
|
|
769
|
+
else:
|
|
770
|
+
lines.append(
|
|
771
|
+
f"✓ {f.repo} — {f.test_command_source} covers every feature "
|
|
772
|
+
f"build_command enables ([{', '.join(f.build_features)}])"
|
|
773
|
+
)
|
|
774
|
+
return lines
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
def feature_coverage_summary_line(findings: list[FeatureCoverageFinding]) -> str:
|
|
778
|
+
"""The machine-readable trailer ``coord diagnose --test-coverage``
|
|
779
|
+
prints, mirroring ``GRAPH_HEALTH:``/``CAPABILITY_RULES:``."""
|
|
780
|
+
gap = sum(1 for f in findings if f.gap)
|
|
781
|
+
return f"TEST_COMMAND_COVERAGE: repos_checked={len(findings)} gap={gap}"
|
|
@@ -423,6 +423,50 @@ CLOSES_ISSUE_TYPES: frozenset[str] = frozenset({"work"})
|
|
|
423
423
|
# which must also list it since it mutates GitHub via `gh pr create`.
|
|
424
424
|
PR_HELPER_TYPE = "pr-helper"
|
|
425
425
|
|
|
426
|
+
# #2966: "only the coordinator writes docs" (this repo's CLAUDE.md says so
|
|
427
|
+
# for every worker) was text-only enforcement — `Repo.coordinator_only_files`
|
|
428
|
+
# is the config key that was clearly designed to seed a work dispatch's
|
|
429
|
+
# `files_forbidden` with the repo's shared docs (see `coord.dispatch.dispatch`
|
|
430
|
+
# lines around #587), but it was set by ZERO of the fleet's 10 repos, so
|
|
431
|
+
# `files_forbidden` started empty for every work dispatch and only ever
|
|
432
|
+
# gained sealed acceptance paths (#944), never a doc. Two workers in the same
|
|
433
|
+
# repo consequently rewrote the same CLAUDE.md section in the same week,
|
|
434
|
+
# producing a semantic (prose) merge conflict that stalled a five-issue
|
|
435
|
+
# cross-repo chain for ~98 ticks until an operator intervened.
|
|
436
|
+
#
|
|
437
|
+
# Mirror the #944 sealed-paths fix for the same class of problem: don't
|
|
438
|
+
# depend on every operator remembering to configure this per repo. A repo's
|
|
439
|
+
# own rulebook is auto-forbidden unconditionally — `coordinator_owned_docs()`
|
|
440
|
+
# below UNIONS this default in regardless of what `coordinator_only_files`
|
|
441
|
+
# says, the same way sealed acceptance paths are auto-added regardless of
|
|
442
|
+
# `coordinator_only_files` (`coord.dispatch.dispatch`'s #944 comment).
|
|
443
|
+
COORDINATOR_OWNED_DOC_DEFAULTS: tuple[str, ...] = ("CLAUDE.md",)
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
def coordinator_owned_docs(repo: "Repo | None") -> list[str]:
|
|
447
|
+
"""Coordinator-only doc paths for *repo* (#2966).
|
|
448
|
+
|
|
449
|
+
Returns :data:`COORDINATOR_OWNED_DOC_DEFAULTS` UNIONED with *repo*'s own
|
|
450
|
+
``coordinator_only_files`` (if any), deduped and order-preserving
|
|
451
|
+
(defaults first). Callers use this instead of reading
|
|
452
|
+
``repo.coordinator_only_files`` directly so the fleet-wide default keeps
|
|
453
|
+
applying even for the common case — today, every repo — where
|
|
454
|
+
``coordinator_only_files`` is unset.
|
|
455
|
+
|
|
456
|
+
#1388-style fail-open: some ``Repo``-shaped stand-ins (a
|
|
457
|
+
wire-reconstructed object, or a stale install predating this field)
|
|
458
|
+
don't carry ``coordinator_only_files`` at all — ``getattr`` with a
|
|
459
|
+
default treats that the same as "unset" rather than raising, matching
|
|
460
|
+
how ``dispatch_review`` already tolerates a stand-in missing
|
|
461
|
+
``develop_branch``.
|
|
462
|
+
"""
|
|
463
|
+
result: list[str] = list(COORDINATOR_OWNED_DOC_DEFAULTS)
|
|
464
|
+
if repo is not None:
|
|
465
|
+
for f in getattr(repo, "coordinator_only_files", None) or []:
|
|
466
|
+
if f not in result:
|
|
467
|
+
result.append(f)
|
|
468
|
+
return result
|
|
469
|
+
|
|
426
470
|
|
|
427
471
|
def trust_issue_closed_for(assignment_type: str | None) -> bool:
|
|
428
472
|
"""Whether :func:`coord.github_ops.work_is_terminal` may trust
|
|
@@ -48,6 +48,7 @@ from coord.models import (
|
|
|
48
48
|
Assignment,
|
|
49
49
|
Board,
|
|
50
50
|
Machine,
|
|
51
|
+
coordinator_owned_docs,
|
|
51
52
|
trust_issue_closed_for,
|
|
52
53
|
)
|
|
53
54
|
from coord.refine_chat import MAX_CLAUDE_MD_CHARS
|
|
@@ -1558,6 +1559,7 @@ def build_review_briefing(
|
|
|
1558
1559
|
diff_text: str | None = None,
|
|
1559
1560
|
sealed_paths: list[str] | None = None,
|
|
1560
1561
|
sealed_entrypoints: list[str] | None = None,
|
|
1562
|
+
coordinator_doc_paths: list[str] | None = None,
|
|
1561
1563
|
assignment_type: str = "work",
|
|
1562
1564
|
provider_same_as_worker: bool = False,
|
|
1563
1565
|
review_provider: str | None = None,
|
|
@@ -1632,6 +1634,18 @@ def build_review_briefing(
|
|
|
1632
1634
|
is expected and non-blocking. Every other type (default ``"work"``) keeps
|
|
1633
1635
|
the original rule unchanged: any touch to *sealed_paths* is mandatory
|
|
1634
1636
|
``request-changes``.
|
|
1637
|
+
|
|
1638
|
+
*coordinator_doc_paths* (#2966) is the repo's coordinator-owned doc set —
|
|
1639
|
+
:func:`coord.models.coordinator_owned_docs`, the repo's own CLAUDE.md plus
|
|
1640
|
+
anything it additionally lists under ``coordinator_only_files``. CLAUDE.md
|
|
1641
|
+
already states "only the coordinator writes docs" for every worker, but
|
|
1642
|
+
that was prose-only: nothing structurally backstopped it, and two workers
|
|
1643
|
+
independently rewriting the same CLAUDE.md section produced a semantic
|
|
1644
|
+
merge conflict that stalled a five-issue chain (#2966). Unlike
|
|
1645
|
+
*sealed_paths*, this rule never inverts — no assignment type's job is
|
|
1646
|
+
ever editing the repo's own rulebook, so any diff that touches one of
|
|
1647
|
+
these paths is mandatory ``request-changes`` regardless of
|
|
1648
|
+
*assignment_type*.
|
|
1635
1649
|
"""
|
|
1636
1650
|
|
|
1637
1651
|
lines: list[str] = []
|
|
@@ -1829,6 +1843,43 @@ def build_review_briefing(
|
|
|
1829
1843
|
"this is a hard rule, not a suggestion (docs/ORACLE_LOOP.md)."
|
|
1830
1844
|
)
|
|
1831
1845
|
|
|
1846
|
+
if coordinator_doc_paths:
|
|
1847
|
+
# #2966: "only the coordinator writes docs" was prose-only — nothing
|
|
1848
|
+
# backstopped it structurally, and two workers independently
|
|
1849
|
+
# rewrote the same CLAUDE.md section in the same week, producing a
|
|
1850
|
+
# semantic (prose) merge conflict that stalled a five-issue chain.
|
|
1851
|
+
# This rule never inverts by assignment_type (unlike sealed_paths
|
|
1852
|
+
# above): no dispatched worker type's job is ever editing the
|
|
1853
|
+
# repo's own rulebook.
|
|
1854
|
+
lines.append("")
|
|
1855
|
+
touched_docs = (
|
|
1856
|
+
_diff_touched_sealed_paths(diff_text, coordinator_doc_paths)
|
|
1857
|
+
if diff_text else []
|
|
1858
|
+
)
|
|
1859
|
+
if touched_docs:
|
|
1860
|
+
lines.append("## \U0001f6a8 COORDINATOR-OWNED DOC EDITED")
|
|
1861
|
+
lines.append("")
|
|
1862
|
+
lines.append(
|
|
1863
|
+
"The diff modifies a coordinator-owned doc: "
|
|
1864
|
+
+ ", ".join(f"`{p}`" for p in touched_docs)
|
|
1865
|
+
+ ". \"Only the coordinator writes docs\" — a worker must "
|
|
1866
|
+
"never edit the repo's own rulebook or other shared docs; "
|
|
1867
|
+
"parallel doc edits from independent workers collide "
|
|
1868
|
+
"(#2966). **request-changes is mandatory here**, regardless "
|
|
1869
|
+
"of anything else in this diff — even if the edit itself "
|
|
1870
|
+
"looks correct in isolation."
|
|
1871
|
+
)
|
|
1872
|
+
else:
|
|
1873
|
+
lines.append("## Coordinator-owned docs (do not touch)")
|
|
1874
|
+
lines.append("")
|
|
1875
|
+
lines.append(
|
|
1876
|
+
"This repo reserves "
|
|
1877
|
+
+ ", ".join(f"`{p}`" for p in coordinator_doc_paths)
|
|
1878
|
+
+ " for the coordinator (#2966). If the diff modifies any of "
|
|
1879
|
+
"them, **request-changes** — this is a hard rule, not a "
|
|
1880
|
+
"suggestion, regardless of assignment type."
|
|
1881
|
+
)
|
|
1882
|
+
|
|
1832
1883
|
lines.append("")
|
|
1833
1884
|
lines.append("## What to do")
|
|
1834
1885
|
lines.append("")
|
|
@@ -2637,6 +2688,12 @@ def dispatch_review(
|
|
|
2637
2688
|
sealed_paths = config.acceptance.sealed_paths(completed.repo_name)
|
|
2638
2689
|
sealed_entrypoints = config.acceptance.entrypoints(completed.repo_name)
|
|
2639
2690
|
|
|
2691
|
+
# #2966: coordinator-owned docs (repo's own CLAUDE.md plus anything it
|
|
2692
|
+
# additionally lists under coordinator_only_files) — see
|
|
2693
|
+
# coordinator_owned_docs' docstring for why this doesn't depend on the
|
|
2694
|
+
# repo actually configuring coordinator_only_files.
|
|
2695
|
+
coordinator_doc_paths = coordinator_owned_docs(repo)
|
|
2696
|
+
|
|
2640
2697
|
client = http_client or httpx
|
|
2641
2698
|
|
|
2642
2699
|
# Iterate candidates in priority order. On agent rejection (4xx from a
|
|
@@ -2706,6 +2763,7 @@ def dispatch_review(
|
|
|
2706
2763
|
diff_text=diff_text,
|
|
2707
2764
|
sealed_paths=sealed_paths,
|
|
2708
2765
|
sealed_entrypoints=sealed_entrypoints,
|
|
2766
|
+
coordinator_doc_paths=coordinator_doc_paths,
|
|
2709
2767
|
assignment_type=completed.type,
|
|
2710
2768
|
)
|
|
2711
2769
|
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"""End-to-end tests for `coord diagnose --test-coverage` — driven through the
|
|
2
|
+
real Click command against real ``coordinator.yml`` files, asserting on
|
|
3
|
+
rendered output (CLAUDE.md black-box coverage bar).
|
|
4
|
+
|
|
5
|
+
#2967: quadraui is configured ``test_command: cargo test --features tui``
|
|
6
|
+
against ``build_command: cargo build --features tui --features gtk
|
|
7
|
+
--features terminal`` — the Test gate never compiles ``src/gtk/**`` or the
|
|
8
|
+
terminal backend, so a `passed` verdict on a change confined to either
|
|
9
|
+
carries no information at all. Nothing previously compared the two
|
|
10
|
+
commands; this drives the CLI end to end against that exact live shape, plus
|
|
11
|
+
the healthy/neutral cases that must NOT be flagged.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
from click.testing import CliRunner
|
|
19
|
+
|
|
20
|
+
from coord.commands.status import diagnose
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _write_config(tmp_path: Path, repos_yaml: str, *, smoke_tests_yaml: str = "") -> Path:
|
|
24
|
+
cfg = tmp_path / "coordinator.yml"
|
|
25
|
+
cfg.write_text(
|
|
26
|
+
"repos:\n"
|
|
27
|
+
f"{repos_yaml}"
|
|
28
|
+
"\n"
|
|
29
|
+
"machines:\n"
|
|
30
|
+
" - name: desktop\n"
|
|
31
|
+
" host: desktop.tailnet\n"
|
|
32
|
+
" capabilities: [rust]\n"
|
|
33
|
+
" repos: [quadraui]\n"
|
|
34
|
+
" repo_paths:\n"
|
|
35
|
+
" quadraui: ~/src/quadraui\n"
|
|
36
|
+
f"{smoke_tests_yaml}",
|
|
37
|
+
encoding="utf-8",
|
|
38
|
+
)
|
|
39
|
+
return cfg
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _run(cfg: Path) -> str:
|
|
43
|
+
result = CliRunner().invoke(
|
|
44
|
+
diagnose, ["--test-coverage", "--config", str(cfg)], catch_exceptions=False
|
|
45
|
+
)
|
|
46
|
+
assert result.exit_code == 0, result.output
|
|
47
|
+
return result.output
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_reports_gap_for_the_live_quadraui_shape(tmp_path: Path) -> None:
|
|
51
|
+
"""The exact live incident (#2967): build_command enables tui+gtk+terminal,
|
|
52
|
+
test_command enables only tui — gtk and terminal are missing and must be
|
|
53
|
+
named explicitly."""
|
|
54
|
+
cfg = _write_config(
|
|
55
|
+
tmp_path,
|
|
56
|
+
" - name: quadraui\n"
|
|
57
|
+
" github: acme/quadraui\n"
|
|
58
|
+
" build_command: \"cargo build --features tui --features gtk --features terminal\"\n"
|
|
59
|
+
" test_command: \"cargo test --features tui\"\n",
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
out = _run(cfg)
|
|
63
|
+
|
|
64
|
+
assert "GAP" in out
|
|
65
|
+
assert "quadraui" in out
|
|
66
|
+
assert "Missing: gtk, terminal" in out
|
|
67
|
+
assert "TEST_COMMAND_COVERAGE: repos_checked=1 gap=1" in out
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_healthy_when_test_command_covers_every_build_feature(tmp_path: Path) -> None:
|
|
71
|
+
cfg = _write_config(
|
|
72
|
+
tmp_path,
|
|
73
|
+
" - name: quadraui\n"
|
|
74
|
+
" github: acme/quadraui\n"
|
|
75
|
+
" build_command: \"cargo build --features tui --features gtk\"\n"
|
|
76
|
+
" test_command: \"cargo test --features tui --features gtk\"\n",
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
out = _run(cfg)
|
|
80
|
+
|
|
81
|
+
assert "GAP" not in out
|
|
82
|
+
assert "TEST_COMMAND_COVERAGE: repos_checked=1 gap=0" in out
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_ci_command_closing_the_gap_reports_healthy_not_the_raw_test_command(
|
|
86
|
+
tmp_path: Path,
|
|
87
|
+
) -> None:
|
|
88
|
+
"""`ci_command` outranks `test_command` for what the Test stage actually
|
|
89
|
+
runs (`coord.smoke.resolve_smoke_command`) — a repo that declares a wider
|
|
90
|
+
`ci_command` must report healthy even though its bare `test_command`
|
|
91
|
+
alone would be a gap."""
|
|
92
|
+
cfg = _write_config(
|
|
93
|
+
tmp_path,
|
|
94
|
+
" - name: quadraui\n"
|
|
95
|
+
" github: acme/quadraui\n"
|
|
96
|
+
" build_command: \"cargo build --features tui --features gtk\"\n"
|
|
97
|
+
" test_command: \"cargo test --features tui\"\n"
|
|
98
|
+
" ci_command: \"cargo test --features tui --features gtk\"\n",
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
out = _run(cfg)
|
|
102
|
+
|
|
103
|
+
assert "GAP" not in out
|
|
104
|
+
assert "ci_command" in out
|
|
105
|
+
assert "TEST_COMMAND_COVERAGE: repos_checked=1 gap=0" in out
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def test_plain_cargo_build_and_test_with_no_features_is_not_flagged(tmp_path: Path) -> None:
|
|
109
|
+
"""vimcode/coord-tui shape: neither command names `--features` at all —
|
|
110
|
+
nothing to compare, so the repo is silently omitted, not reported."""
|
|
111
|
+
cfg = _write_config(
|
|
112
|
+
tmp_path,
|
|
113
|
+
" - name: quadraui\n"
|
|
114
|
+
" github: acme/quadraui\n"
|
|
115
|
+
" build_command: \"cargo build\"\n"
|
|
116
|
+
" test_command: \"cargo test\"\n",
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
out = _run(cfg)
|
|
120
|
+
|
|
121
|
+
assert "GAP" not in out
|
|
122
|
+
assert "nothing to check" in out
|
|
123
|
+
assert "TEST_COMMAND_COVERAGE: repos_checked=0 gap=0" in out
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def test_no_build_command_at_all_is_not_flagged(tmp_path: Path) -> None:
|
|
127
|
+
cfg = _write_config(
|
|
128
|
+
tmp_path,
|
|
129
|
+
" - name: quadraui\n"
|
|
130
|
+
" github: acme/quadraui\n"
|
|
131
|
+
" test_command: \"cargo test --features tui\"\n",
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
out = _run(cfg)
|
|
135
|
+
|
|
136
|
+
assert "GAP" not in out
|
|
137
|
+
assert "TEST_COMMAND_COVERAGE: repos_checked=0 gap=0" in out
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def test_unconfigured_test_command_reports_every_feature_missing(tmp_path: Path) -> None:
|
|
141
|
+
cfg = _write_config(
|
|
142
|
+
tmp_path,
|
|
143
|
+
" - name: quadraui\n"
|
|
144
|
+
" github: acme/quadraui\n"
|
|
145
|
+
" build_command: \"cargo build --features tui --features gtk\"\n",
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
out = _run(cfg)
|
|
149
|
+
|
|
150
|
+
assert "GAP" in out
|
|
151
|
+
assert "(unconfigured)" in out
|
|
152
|
+
assert "Missing: gtk, tui" in out
|
|
153
|
+
assert "TEST_COMMAND_COVERAGE: repos_checked=1 gap=1" in out
|
|
@@ -302,7 +302,10 @@ class TestDispatch:
|
|
|
302
302
|
)
|
|
303
303
|
dispatch(proposal, cfg)
|
|
304
304
|
payload = mock_post.call_args.kwargs["json"]
|
|
305
|
-
|
|
305
|
+
# #2966: CLAUDE.md is unioned in as a fleet-wide default ahead of
|
|
306
|
+
# the repo's own configured coordinator_only_files — see
|
|
307
|
+
# coord.models.coordinator_owned_docs.
|
|
308
|
+
assert payload["files_forbidden"] == ["CLAUDE.md", "README.md", "CHANGELOG.md"]
|
|
306
309
|
|
|
307
310
|
@patch("coord.dispatch.httpx.post")
|
|
308
311
|
def test_payload_auto_seals_acceptance_dir_when_driver_configured(
|
|
@@ -404,7 +407,33 @@ class TestDispatch:
|
|
|
404
407
|
mock_post.return_value = mock_resp
|
|
405
408
|
dispatch(proposal, config)
|
|
406
409
|
payload = mock_post.call_args.kwargs["json"]
|
|
407
|
-
|
|
410
|
+
# #2966: no acceptance driver and no coordinator_only_files configured
|
|
411
|
+
# still carries the fleet-wide doc default (CLAUDE.md) — the source
|
|
412
|
+
# list is never actually empty, unlike pre-#2966.
|
|
413
|
+
assert payload["files_forbidden"] == ["CLAUDE.md"]
|
|
414
|
+
|
|
415
|
+
@patch("coord.dispatch.httpx.post")
|
|
416
|
+
def test_payload_forbids_claude_md_by_default(
|
|
417
|
+
self, mock_post: MagicMock, proposal: Proposal,
|
|
418
|
+
) -> None:
|
|
419
|
+
"""#2966: repo.coordinator_only_files is set by zero repos fleet-wide,
|
|
420
|
+
so files_forbidden must not depend on it to protect the repo's own
|
|
421
|
+
rulebook — CLAUDE.md is auto-forbidden the same way sealed acceptance
|
|
422
|
+
paths are auto-added regardless of config (#944)."""
|
|
423
|
+
mock_resp = MagicMock()
|
|
424
|
+
mock_resp.json.return_value = {"ok": True}
|
|
425
|
+
mock_post.return_value = mock_resp
|
|
426
|
+
|
|
427
|
+
cfg = Config(
|
|
428
|
+
repos=[Repo(name="api", github="acme/api")],
|
|
429
|
+
machines=[Machine(
|
|
430
|
+
name="laptop", host="laptop.tailnet", repos=["api"],
|
|
431
|
+
repo_paths={"api": "/home/user/src/api"},
|
|
432
|
+
)],
|
|
433
|
+
)
|
|
434
|
+
dispatch(proposal, cfg)
|
|
435
|
+
payload = mock_post.call_args.kwargs["json"]
|
|
436
|
+
assert "CLAUDE.md" in payload["files_forbidden"]
|
|
408
437
|
|
|
409
438
|
@patch("coord.dispatch.httpx.post")
|
|
410
439
|
def test_payload_acceptance_seal_dedupes_with_coordinator_only_files(
|