code-coordinator 0.5.189__tar.gz → 0.5.190__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.189 → code_coordinator-0.5.190}/PKG-INFO +1 -1
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/agent.py +99 -25
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/dispatch_workers.py +2 -2
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/providers/claude.py +19 -4
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/review.py +8 -2
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent.py +81 -11
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_providers.py +85 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/.gitignore +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/CLAUDE.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/GOAL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/LICENSE +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/MANIFEST.in +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/README.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/__init__.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/audit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/block_log.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/board_service.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/brain.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/claim.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/cli.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/client.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/comments.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/config.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/dao.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/db.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/deps.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/drive.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/events.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/filelock.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/freshness.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/gates.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/goal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/context.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/models.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/render.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/health/units.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/hooks.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/interactive.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/models.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/network.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/notify.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/openapi.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/parentage.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/plans.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/progress.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/release_window.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/reports.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/self_health.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/smoke.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/split_work.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/state.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/test_author.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/test_report.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/usage.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/install-agent.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/pyproject.toml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/setup.cfg +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/__init__.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/conftest.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_config.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_db.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_events.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_init.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_models.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_network.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_review.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_session.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_split.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_state.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.189 → code_coordinator-0.5.190}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -3901,13 +3901,16 @@ def _base_checkout_write_guard_tools(repo_path: str) -> list[str]:
|
|
|
3901
3901
|
# editing coordinator.yml/coord.db) silently also blocked every worker's own
|
|
3902
3902
|
# worktree under `~/.coord/worktrees/<id>/`, burning a full $5.23 session
|
|
3903
3903
|
# that reasoned, designed, and only discovered at the very end that it could
|
|
3904
|
-
# not save anything. `default_worker_command`'s `--
|
|
3905
|
-
#
|
|
3906
|
-
#
|
|
3907
|
-
#
|
|
3908
|
-
#
|
|
3909
|
-
#
|
|
3910
|
-
#
|
|
3904
|
+
# not save anything. `default_worker_command`'s `--bare` (above, #2462;
|
|
3905
|
+
# originally the narrower `--setting-sources user`) closes off the specific
|
|
3906
|
+
# mechanism for headless workers — they no longer load *any* Claude Code
|
|
3907
|
+
# settings.json (user, project, or local) — but this preflight check is kept
|
|
3908
|
+
# as a defense-in-depth: it still catches a blanket deny rule living in the
|
|
3909
|
+
# machine's *user*-level settings (`~/.claude/settings.json`) that would
|
|
3910
|
+
# affect the human-attended interactive PTY path (which intentionally keeps
|
|
3911
|
+
# the default setting sources, see the comment in `default_worker_command`),
|
|
3912
|
+
# and it catches plain OS-level write failures (read-only mount, wrong
|
|
3913
|
+
# ownership, full disk) that have nothing to do with Claude Code at all.
|
|
3911
3914
|
_DENY_PATTERN_RE = re.compile(r"^(Edit|Write)\(//(.+)\)$")
|
|
3912
3915
|
|
|
3913
3916
|
|
|
@@ -3977,11 +3980,13 @@ def find_blocking_deny_rule(
|
|
|
3977
3980
|
"""Scan Claude Code settings files for a deny rule blocking *worktree_path*.
|
|
3978
3981
|
|
|
3979
3982
|
Defaults to scanning just the machine's user-level settings
|
|
3980
|
-
(``~/.claude/settings.json``)
|
|
3981
|
-
|
|
3982
|
-
|
|
3983
|
-
|
|
3984
|
-
|
|
3983
|
+
(``~/.claude/settings.json``). Since #2462, headless workers run with
|
|
3984
|
+
``--bare`` and load no Claude Code settings.json at all (user, project,
|
|
3985
|
+
or local) — this file matters for the human-attended interactive PTY
|
|
3986
|
+
path (:class:`coord.providers.claude_pty.ClaudePtyProvider`), which
|
|
3987
|
+
intentionally keeps the default setting sources; a checkout-local
|
|
3988
|
+
``.claude/settings.local.json`` can no longer reach a headless worker at
|
|
3989
|
+
all either way, so it is intentionally not scanned here.
|
|
3985
3990
|
|
|
3986
3991
|
Returns a human-readable ``"'<pattern>' in <file>"`` message for the
|
|
3987
3992
|
first matching rule found, or ``None`` when no scanned file carries one
|
|
@@ -4051,6 +4056,34 @@ def check_worktree_writable(
|
|
|
4051
4056
|
return None
|
|
4052
4057
|
|
|
4053
4058
|
|
|
4059
|
+
def _claude_md_system_prompt_suffix(repo_path: str) -> str:
|
|
4060
|
+
"""Return a system-prompt suffix embedding the target repo's CLAUDE.md.
|
|
4061
|
+
|
|
4062
|
+
#2462: worker dispatch below passes ``--bare``, which disables Claude
|
|
4063
|
+
Code's own automatic CLAUDE.md auto-discovery (along with hooks,
|
|
4064
|
+
``.mcp.json``, and settings — see the ``--bare`` comment in
|
|
4065
|
+
:func:`default_worker_command`). Nothing else in a work-shaped leg's
|
|
4066
|
+
briefing embeds the target repo's actual CLAUDE.md text, so without this
|
|
4067
|
+
a worker would silently lose every per-repo convention, testing rule,
|
|
4068
|
+
and sealed-path note that isn't hardcoded into the repo-agnostic
|
|
4069
|
+
``WORKER_SYSTEM_PROMPT``.
|
|
4070
|
+
|
|
4071
|
+
Mirrors :func:`coord.review.read_repo_claude_md`, which the review leg
|
|
4072
|
+
already uses for the same reason (a review must never run blind to
|
|
4073
|
+
CLAUDE.md) — this repo's own CLAUDE.md says it is "loaded into every
|
|
4074
|
+
worker leg, every review leg, and every coordinator session", so the
|
|
4075
|
+
work-shaped legs need the identical defensive read now that ambient
|
|
4076
|
+
discovery is gone. Returns ``""`` (a no-op suffix) when the repo has no
|
|
4077
|
+
CLAUDE.md or it can't be read.
|
|
4078
|
+
"""
|
|
4079
|
+
from coord.review import read_repo_claude_md # noqa: PLC0415
|
|
4080
|
+
|
|
4081
|
+
claude_md = read_repo_claude_md(Path(repo_path).expanduser())
|
|
4082
|
+
if not claude_md:
|
|
4083
|
+
return ""
|
|
4084
|
+
return "\n\n## Project rules (from CLAUDE.md)\n\n" + claude_md.strip() + "\n"
|
|
4085
|
+
|
|
4086
|
+
|
|
4054
4087
|
def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER_BINARY) -> list[str]:
|
|
4055
4088
|
"""Build the argv for invoking the worker on this assignment.
|
|
4056
4089
|
|
|
@@ -4073,6 +4106,9 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4073
4106
|
"""
|
|
4074
4107
|
if spec.type == "plan":
|
|
4075
4108
|
system_prompt = spec.system_prompt if spec.system_prompt else WORKER_PLAN_PROMPT
|
|
4109
|
+
# #2462: --bare drops CLAUDE.md auto-discovery; a plan leg still
|
|
4110
|
+
# needs the target repo's conventions to plan against.
|
|
4111
|
+
system_prompt += _claude_md_system_prompt_suffix(spec.repo_path)
|
|
4076
4112
|
allowed_tools = "Read,Bash"
|
|
4077
4113
|
elif spec.type == "refinement":
|
|
4078
4114
|
# #264: refinement is a developer-driven chat for scoping an issue.
|
|
@@ -4126,6 +4162,8 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4126
4162
|
# and deny list instead of the generic WORKER_SYSTEM_PROMPT.
|
|
4127
4163
|
system_prompt = spec.system_prompt if spec.system_prompt else MOCK_AUTHOR_SYSTEM_PROMPT
|
|
4128
4164
|
system_prompt += build_deny_prompt(MOCK_AUTHOR_DENY_COMMANDS)
|
|
4165
|
+
# #2462: --bare drops CLAUDE.md auto-discovery.
|
|
4166
|
+
system_prompt += _claude_md_system_prompt_suffix(spec.repo_path)
|
|
4129
4167
|
allowed_tools = "Read,Edit,Write,Bash"
|
|
4130
4168
|
elif spec.type == "smoke":
|
|
4131
4169
|
# #2301: smoke gets its own branch instead of falling through to the
|
|
@@ -4177,6 +4215,11 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4177
4215
|
else:
|
|
4178
4216
|
system_prompt = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
|
|
4179
4217
|
system_prompt += build_deny_prompt(spec.deny_commands)
|
|
4218
|
+
# #2462: --bare drops CLAUDE.md auto-discovery for this catch-all
|
|
4219
|
+
# branch too — it covers "work", "fix", "conflict-fix", and
|
|
4220
|
+
# "test-author", every one of which edits code and needs the
|
|
4221
|
+
# target repo's conventions. See _claude_md_system_prompt_suffix.
|
|
4222
|
+
system_prompt += _claude_md_system_prompt_suffix(spec.repo_path)
|
|
4180
4223
|
# #2169: `Monitor` is the sanctioned way to poll a backgrounded
|
|
4181
4224
|
# long-running command in bounded steps (see the ONE-SHOT section of
|
|
4182
4225
|
# WORKER_SYSTEM_PROMPT) instead of a foreground loop that blocks
|
|
@@ -4204,8 +4247,8 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4204
4247
|
"--system-prompt", system_prompt,
|
|
4205
4248
|
"--allowedTools", allowed_tools,
|
|
4206
4249
|
"--permission-mode", "acceptEdits",
|
|
4207
|
-
# #1445: a worker must not inherit whatever project/local
|
|
4208
|
-
# settings the host's checkout happens to carry — e.g. a
|
|
4250
|
+
# #1445 / #2462: a worker must not inherit whatever project/local
|
|
4251
|
+
# Claude Code settings the host's checkout happens to carry — e.g. a
|
|
4209
4252
|
# `.claude/settings.local.json` deny rule the OPERATOR added for
|
|
4210
4253
|
# their own interactive session in that checkout (meant to protect
|
|
4211
4254
|
# ~/.coord/coordinator.yml etc from an interactive session, but
|
|
@@ -4216,17 +4259,48 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4216
4259
|
# has no .claude/ dir of its own (it's untracked/gitignored there),
|
|
4217
4260
|
# so a deny rule that never touches the worktree's working directory
|
|
4218
4261
|
# still blocked Edit/Write calls from a `claude -p` session cwd'd
|
|
4219
|
-
# into that worktree.
|
|
4220
|
-
#
|
|
4221
|
-
#
|
|
4222
|
-
#
|
|
4223
|
-
#
|
|
4224
|
-
#
|
|
4225
|
-
#
|
|
4226
|
-
#
|
|
4227
|
-
#
|
|
4228
|
-
#
|
|
4229
|
-
|
|
4262
|
+
# into that worktree.
|
|
4263
|
+
#
|
|
4264
|
+
# `--setting-sources user` (the original #1445 fix) only closed this
|
|
4265
|
+
# for *settings.json* — a checkout's `.claude/hooks/` and `.mcp.json`
|
|
4266
|
+
# are governed separately and kept loading regardless, so a
|
|
4267
|
+
# never-trusted repo's hooks would still run and its MCP servers
|
|
4268
|
+
# would still connect in every worker session, because a `-p`
|
|
4269
|
+
# session shows neither the workspace-trust dialog nor the
|
|
4270
|
+
# per-server MCP approval prompt that would normally gate that (see
|
|
4271
|
+
# code.claude.com/docs/en/headless.md). `--bare` is the flag that
|
|
4272
|
+
# closes all three sources (settings, hooks, .mcp.json) at once, plus
|
|
4273
|
+
# LSP/plugin-sync/CLAUDE.md auto-discovery — none of which a headless
|
|
4274
|
+
# worker should be picking up *ambiently* from the target repo's own
|
|
4275
|
+
# checkout either. A worker's permission profile is fully controlled
|
|
4276
|
+
# by the --allowedTools / --disallowedTools / --permission-mode
|
|
4277
|
+
# flags in this function (and its own hard-coded system prompt); it
|
|
4278
|
+
# needs no MCP servers (no spec.type grants the `Agent` tool, so
|
|
4279
|
+
# `--agents` is unneeded too) and no `--settings`.
|
|
4280
|
+
#
|
|
4281
|
+
# CLAUDE.md is the one exception worth calling out: losing its
|
|
4282
|
+
# *ambient* auto-discovery does NOT mean a work-shaped leg loses the
|
|
4283
|
+
# content. `_claude_md_system_prompt_suffix` (see the branches
|
|
4284
|
+
# above: "plan", "mock-author", and this catch-all "else") reads it
|
|
4285
|
+
# explicitly off *spec.repo_path* and embeds it into --system-prompt
|
|
4286
|
+
# instead — the same defensive pattern coord.review.read_repo_claude_md
|
|
4287
|
+
# already used for review legs (#2462).
|
|
4288
|
+
#
|
|
4289
|
+
# AUTH CAVEAT: per Claude Code's own docs, `--bare` "never reads
|
|
4290
|
+
# OAuth credentials or the system keychain" — only `ANTHROPIC_API_KEY`
|
|
4291
|
+
# (env, inherited via `_worker_subprocess_env`) or an `apiKeyHelper`
|
|
4292
|
+
# supplied via `--settings` authenticate. This is a behavior change
|
|
4293
|
+
# for any fleet machine whose worker auth today comes from
|
|
4294
|
+
# `claude setup-token` / `CLAUDE_CODE_OAUTH_TOKEN` or an interactive
|
|
4295
|
+
# `claude login` (the pattern docs/CONTROL_CENTER.md §14 documents for
|
|
4296
|
+
# per-person subscription auth) rather than an API key — such a
|
|
4297
|
+
# machine must switch to `ANTHROPIC_API_KEY` (or an `apiKeyHelper`)
|
|
4298
|
+
# for headless dispatch to keep authenticating. This is the
|
|
4299
|
+
# headless/`claude -p` path only — the human-attended interactive PTY
|
|
4300
|
+
# path (coord.providers.claude_pty.ClaudePtyProvider) intentionally
|
|
4301
|
+
# keeps the default sources, so OAuth/keychain login still works for
|
|
4302
|
+
# a session an operator is attached to and watching.
|
|
4303
|
+
"--bare",
|
|
4230
4304
|
]
|
|
4231
4305
|
if spec.model:
|
|
4232
4306
|
argv.extend(["--model", spec.model])
|
|
@@ -147,8 +147,8 @@ def _dispatch_review_of(
|
|
|
147
147
|
|
|
148
148
|
from coord.review import ( # noqa: PLC0415
|
|
149
149
|
REVIEWER_SYSTEM_PROMPT,
|
|
150
|
-
_read_repo_claude_md,
|
|
151
150
|
build_review_briefing,
|
|
151
|
+
read_repo_claude_md,
|
|
152
152
|
)
|
|
153
153
|
from coord.models import Assignment # noqa: PLC0415
|
|
154
154
|
from coord.state import ( # noqa: PLC0415
|
|
@@ -194,7 +194,7 @@ def _dispatch_review_of(
|
|
|
194
194
|
# have the reviewer read ./CLAUDE.md in the remote checkout it sits
|
|
195
195
|
# in (its actual rules, not the coordinator's possibly-divergent copy).
|
|
196
196
|
claude_md = (
|
|
197
|
-
|
|
197
|
+
read_repo_claude_md(Path(review_repo_path)) if _is_local else ""
|
|
198
198
|
)
|
|
199
199
|
|
|
200
200
|
# #612: embed the merge-base (three-dot) diff so the reviewer has
|
|
@@ -118,6 +118,7 @@ class ClaudeProvider(Provider):
|
|
|
118
118
|
WORKER_PLAN_PROMPT,
|
|
119
119
|
WORKER_SYSTEM_PROMPT,
|
|
120
120
|
_base_checkout_write_guard_tools,
|
|
121
|
+
_claude_md_system_prompt_suffix,
|
|
121
122
|
_sealed_write_guard_tools,
|
|
122
123
|
build_deny_prompt,
|
|
123
124
|
)
|
|
@@ -142,6 +143,10 @@ class ClaudeProvider(Provider):
|
|
|
142
143
|
if system_prompt is None or allowed_tools is None:
|
|
143
144
|
if spec.type == "plan":
|
|
144
145
|
_sp = spec.system_prompt if spec.system_prompt else WORKER_PLAN_PROMPT
|
|
146
|
+
# #2462: keep in sync with default_worker_command's identical
|
|
147
|
+
# branch — `--bare` below drops CLAUDE.md auto-discovery, so a
|
|
148
|
+
# plan leg needs the target repo's conventions embedded here.
|
|
149
|
+
_sp += _claude_md_system_prompt_suffix(spec.repo_path)
|
|
145
150
|
_at = "Read,Bash"
|
|
146
151
|
elif spec.type == "refinement":
|
|
147
152
|
_sp = spec.system_prompt if spec.system_prompt else REFINEMENT_SYSTEM_PROMPT
|
|
@@ -172,6 +177,9 @@ class ClaudeProvider(Provider):
|
|
|
172
177
|
elif spec.type == "mock-author":
|
|
173
178
|
_sp = spec.system_prompt if spec.system_prompt else MOCK_AUTHOR_SYSTEM_PROMPT
|
|
174
179
|
_sp += build_deny_prompt(MOCK_AUTHOR_DENY_COMMANDS)
|
|
180
|
+
# #2462: keep in sync with default_worker_command — `--bare`
|
|
181
|
+
# drops CLAUDE.md auto-discovery.
|
|
182
|
+
_sp += _claude_md_system_prompt_suffix(spec.repo_path)
|
|
175
183
|
_at = "Read,Edit,Write,Bash"
|
|
176
184
|
elif spec.type == "smoke":
|
|
177
185
|
# #2301: keep in sync with default_worker_command's identical
|
|
@@ -196,6 +204,12 @@ class ClaudeProvider(Provider):
|
|
|
196
204
|
else:
|
|
197
205
|
_sp = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
|
|
198
206
|
_sp += build_deny_prompt(spec.deny_commands)
|
|
207
|
+
# #2462: keep in sync with default_worker_command's identical
|
|
208
|
+
# catch-all branch — it covers "work", "fix", "conflict-fix"
|
|
209
|
+
# and "test-author", every one of which edits code and needs
|
|
210
|
+
# the target repo's CLAUDE.md conventions, which `--bare`
|
|
211
|
+
# below stops Claude Code from auto-discovering.
|
|
212
|
+
_sp += _claude_md_system_prompt_suffix(spec.repo_path)
|
|
199
213
|
# #2169: keep in sync with default_worker_command's identical
|
|
200
214
|
# branch — Monitor is the sanctioned bounded-poll tool for a
|
|
201
215
|
# backgrounded long-running command. #2301: this grant is for
|
|
@@ -215,10 +229,11 @@ class ClaudeProvider(Provider):
|
|
|
215
229
|
"--system-prompt", system_prompt,
|
|
216
230
|
"--allowedTools", allowed_tools,
|
|
217
231
|
"--permission-mode", permission_mode,
|
|
218
|
-
# #1445: see the matching comment in
|
|
219
|
-
# workers must not inherit the host
|
|
220
|
-
# Claude Code settings
|
|
221
|
-
|
|
232
|
+
# #1445 / #2462: see the matching comment in
|
|
233
|
+
# default_worker_command — workers must not inherit the host
|
|
234
|
+
# checkout's project/local Claude Code settings, hooks, or
|
|
235
|
+
# .mcp.json MCP servers. `--bare` closes all of those at once.
|
|
236
|
+
"--bare",
|
|
222
237
|
]
|
|
223
238
|
if effective_model:
|
|
224
239
|
argv.extend(["--model", effective_model])
|
|
@@ -1213,7 +1213,7 @@ def _ranked_reviewer_candidates(
|
|
|
1213
1213
|
|
|
1214
1214
|
# ── Briefing construction ───────────────────────────────────────────────────
|
|
1215
1215
|
|
|
1216
|
-
def
|
|
1216
|
+
def read_repo_claude_md(repo_path: Path) -> str | None:
|
|
1217
1217
|
"""Return the contents of CLAUDE.md at the repo root, or None.
|
|
1218
1218
|
|
|
1219
1219
|
The coordinator runs on the machine that dispatches; the reviewer runs on
|
|
@@ -1221,6 +1221,12 @@ def _read_repo_claude_md(repo_path: Path) -> str | None:
|
|
|
1221
1221
|
here so the briefing is self-contained — if the reviewer's checkout is
|
|
1222
1222
|
behind, the worker's diff still gets reviewed against the rules the
|
|
1223
1223
|
coordinator thought were current.
|
|
1224
|
+
|
|
1225
|
+
Public (no leading underscore) because #2462 reuses it from
|
|
1226
|
+
:mod:`coord.agent` — since worker dispatch switched to ``--bare``,
|
|
1227
|
+
Claude Code's own CLAUDE.md auto-discovery no longer runs for
|
|
1228
|
+
work-shaped legs, so ``default_worker_command`` embeds this the same
|
|
1229
|
+
defensive way the review briefing already did.
|
|
1224
1230
|
"""
|
|
1225
1231
|
candidate = repo_path / "CLAUDE.md"
|
|
1226
1232
|
if not candidate.exists():
|
|
@@ -1883,7 +1889,7 @@ def dispatch_review(
|
|
|
1883
1889
|
*,
|
|
1884
1890
|
http_client: httpx.Client | None = None,
|
|
1885
1891
|
pr_lookup=_find_or_open_pr,
|
|
1886
|
-
claude_md_reader=
|
|
1892
|
+
claude_md_reader=read_repo_claude_md,
|
|
1887
1893
|
issue_body_fetcher=None,
|
|
1888
1894
|
now: float | None = None,
|
|
1889
1895
|
terminal_cache: dict | None = None,
|
|
@@ -1533,11 +1533,12 @@ def test_default_worker_command_mock_author_not_sealed() -> None:
|
|
|
1533
1533
|
# ── #1445: worktree-writability preflight ───────────────────────────────────
|
|
1534
1534
|
|
|
1535
1535
|
|
|
1536
|
-
def
|
|
1536
|
+
def test_default_worker_command_uses_bare_mode() -> None:
|
|
1537
1537
|
"""A worker must not inherit the host checkout's project/local Claude
|
|
1538
|
-
Code settings
|
|
1539
|
-
|
|
1540
|
-
|
|
1538
|
+
Code settings, hooks, or .mcp.json MCP servers — see #1445 and #2462.
|
|
1539
|
+
`--bare` closes all three sources at once; the narrower
|
|
1540
|
+
`--setting-sources user` (the original #1445 fix) only closed settings.json
|
|
1541
|
+
and left hooks/.mcp.json loading from a never-trusted repo."""
|
|
1541
1542
|
spec = AssignmentSpec(
|
|
1542
1543
|
repo_name="api",
|
|
1543
1544
|
repo_path="/tmp/repo",
|
|
@@ -1546,12 +1547,11 @@ def test_default_worker_command_restricts_setting_sources_to_user() -> None:
|
|
|
1546
1547
|
briefing="b",
|
|
1547
1548
|
)
|
|
1548
1549
|
argv = default_worker_command(spec)
|
|
1549
|
-
assert "--
|
|
1550
|
-
|
|
1551
|
-
assert argv[idx + 1] == "user"
|
|
1550
|
+
assert "--bare" in argv
|
|
1551
|
+
assert "--setting-sources" not in argv
|
|
1552
1552
|
|
|
1553
1553
|
|
|
1554
|
-
def
|
|
1554
|
+
def test_default_worker_command_uses_bare_mode_for_plan_type() -> None:
|
|
1555
1555
|
"""Same restriction applies to every spec.type, not just 'work' — all of
|
|
1556
1556
|
them are headless dispatches that must not depend on host checkout
|
|
1557
1557
|
state."""
|
|
@@ -1564,9 +1564,79 @@ def test_default_worker_command_restricts_setting_sources_for_plan_type() -> Non
|
|
|
1564
1564
|
type="plan",
|
|
1565
1565
|
)
|
|
1566
1566
|
argv = default_worker_command(spec)
|
|
1567
|
-
assert "--
|
|
1568
|
-
|
|
1569
|
-
|
|
1567
|
+
assert "--bare" in argv
|
|
1568
|
+
assert "--setting-sources" not in argv
|
|
1569
|
+
|
|
1570
|
+
|
|
1571
|
+
def test_default_worker_command_embeds_claude_md_for_work_type(tmp_path: Path) -> None:
|
|
1572
|
+
"""#2462: `--bare` disables Claude Code's own CLAUDE.md auto-discovery,
|
|
1573
|
+
so a work-shaped leg would otherwise never see the target repo's
|
|
1574
|
+
CLAUDE.md at all. default_worker_command must embed it into the
|
|
1575
|
+
--system-prompt argv itself, mirroring the review leg's
|
|
1576
|
+
read_repo_claude_md defensive read (coord/review.py)."""
|
|
1577
|
+
(tmp_path / "CLAUDE.md").write_text("# Project rules\n\nAlways use tabs.\n")
|
|
1578
|
+
spec = AssignmentSpec(
|
|
1579
|
+
repo_name="api",
|
|
1580
|
+
repo_path=str(tmp_path),
|
|
1581
|
+
issue_number=1,
|
|
1582
|
+
issue_title="t",
|
|
1583
|
+
briefing="b",
|
|
1584
|
+
)
|
|
1585
|
+
argv = default_worker_command(spec)
|
|
1586
|
+
assert "--bare" in argv
|
|
1587
|
+
idx = argv.index("--system-prompt")
|
|
1588
|
+
system_prompt = argv[idx + 1]
|
|
1589
|
+
assert "Always use tabs." in system_prompt
|
|
1590
|
+
assert "Project rules (from CLAUDE.md)" in system_prompt
|
|
1591
|
+
|
|
1592
|
+
|
|
1593
|
+
def test_default_worker_command_embeds_claude_md_for_plan_type(tmp_path: Path) -> None:
|
|
1594
|
+
"""Same defensive read applies to type='plan', which gets its own
|
|
1595
|
+
branch in default_worker_command rather than falling into the
|
|
1596
|
+
catch-all 'work' else-branch."""
|
|
1597
|
+
(tmp_path / "CLAUDE.md").write_text("# Project rules\n\nNo emoji.\n")
|
|
1598
|
+
spec = AssignmentSpec(
|
|
1599
|
+
repo_name="api",
|
|
1600
|
+
repo_path=str(tmp_path),
|
|
1601
|
+
issue_number=1,
|
|
1602
|
+
issue_title="t",
|
|
1603
|
+
briefing="b",
|
|
1604
|
+
type="plan",
|
|
1605
|
+
)
|
|
1606
|
+
argv = default_worker_command(spec)
|
|
1607
|
+
idx = argv.index("--system-prompt")
|
|
1608
|
+
assert "No emoji." in argv[idx + 1]
|
|
1609
|
+
|
|
1610
|
+
|
|
1611
|
+
def test_default_worker_command_embeds_claude_md_for_mock_author_type(tmp_path: Path) -> None:
|
|
1612
|
+
"""Same defensive read applies to type='mock-author'."""
|
|
1613
|
+
(tmp_path / "CLAUDE.md").write_text("# Project rules\n\nGate A first.\n")
|
|
1614
|
+
spec = AssignmentSpec(
|
|
1615
|
+
repo_name="api",
|
|
1616
|
+
repo_path=str(tmp_path),
|
|
1617
|
+
issue_number=1,
|
|
1618
|
+
issue_title="[gate-a] t",
|
|
1619
|
+
briefing="b",
|
|
1620
|
+
type="mock-author",
|
|
1621
|
+
)
|
|
1622
|
+
argv = default_worker_command(spec)
|
|
1623
|
+
idx = argv.index("--system-prompt")
|
|
1624
|
+
assert "Gate A first." in argv[idx + 1]
|
|
1625
|
+
|
|
1626
|
+
|
|
1627
|
+
def test_default_worker_command_no_claude_md_is_a_noop(tmp_path: Path) -> None:
|
|
1628
|
+
"""A repo with no CLAUDE.md must not blow up or inject an empty section
|
|
1629
|
+
header into the system prompt."""
|
|
1630
|
+
spec = AssignmentSpec(
|
|
1631
|
+
repo_name="api",
|
|
1632
|
+
repo_path=str(tmp_path),
|
|
1633
|
+
issue_number=1,
|
|
1634
|
+
issue_title="t",
|
|
1635
|
+
briefing="b",
|
|
1636
|
+
)
|
|
1637
|
+
argv = default_worker_command(spec)
|
|
1638
|
+
idx = argv.index("--system-prompt")
|
|
1639
|
+
assert "Project rules (from CLAUDE.md)" not in argv[idx + 1]
|
|
1570
1640
|
|
|
1571
1641
|
|
|
1572
1642
|
def test_deny_pattern_blocks_path_matches_blanket_prefix() -> None:
|
|
@@ -187,6 +187,91 @@ def test_parity_custom_system_prompt() -> None:
|
|
|
187
187
|
_parity(spec)
|
|
188
188
|
|
|
189
189
|
|
|
190
|
+
# ── #2462: CLAUDE.md embed parity (--bare kills auto-discovery) ──────────────
|
|
191
|
+
#
|
|
192
|
+
# The parity helper above uses repo_path="/some/path", which does not exist —
|
|
193
|
+
# so `_claude_md_system_prompt_suffix` returns "" on BOTH sides and the parity
|
|
194
|
+
# assertion cannot see a divergence in the CLAUDE.md embed. These cases point
|
|
195
|
+
# the spec at a tmp_path that really contains a CLAUDE.md, so the embed is
|
|
196
|
+
# non-empty and parity is actually load-bearing for it. The direct
|
|
197
|
+
# `build_command` assertions below then pin the provider seam itself — the
|
|
198
|
+
# path production dispatch really takes (coord/commands/dispatch_workers.py
|
|
199
|
+
# and friends call provider.build_command(), never default_worker_command) —
|
|
200
|
+
# so "both sides dropped the embed" fails too, not just "they diverged".
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def _claude_md_repo(tmp_path: Path, body: str) -> Path:
|
|
204
|
+
(tmp_path / "CLAUDE.md").write_text(body)
|
|
205
|
+
return tmp_path
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def test_parity_work_type_with_real_claude_md(tmp_path: Path) -> None:
|
|
209
|
+
"""Work leg: identical argv when the repo really has a CLAUDE.md."""
|
|
210
|
+
repo = _claude_md_repo(tmp_path, "# Project rules\n\nAlways use tabs.\n")
|
|
211
|
+
_parity(_make_spec(type="work", repo_path=str(repo)))
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def test_parity_plan_type_with_real_claude_md(tmp_path: Path) -> None:
|
|
215
|
+
"""Plan leg: identical argv when the repo really has a CLAUDE.md."""
|
|
216
|
+
repo = _claude_md_repo(tmp_path, "# Project rules\n\nNo emoji.\n")
|
|
217
|
+
_parity(_make_spec(type="plan", repo_path=str(repo)))
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def test_parity_mock_author_type_with_real_claude_md(tmp_path: Path) -> None:
|
|
221
|
+
"""Mock-author leg: identical argv when the repo really has a CLAUDE.md."""
|
|
222
|
+
repo = _claude_md_repo(tmp_path, "# Project rules\n\nGate A first.\n")
|
|
223
|
+
_parity(_make_spec(type="mock-author", repo_path=str(repo)))
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def test_parity_fix_type_with_real_claude_md(tmp_path: Path) -> None:
|
|
227
|
+
"""Fix leg (catch-all branch, same as work/conflict-fix/test-author)."""
|
|
228
|
+
repo = _claude_md_repo(tmp_path, "# Project rules\n\nRun ruff.\n")
|
|
229
|
+
_parity(_make_spec(type="fix", repo_path=str(repo)))
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
@pytest.mark.parametrize(
|
|
233
|
+
("spec_type", "rule"),
|
|
234
|
+
[
|
|
235
|
+
("work", "Always use tabs."),
|
|
236
|
+
("fix", "Run ruff."),
|
|
237
|
+
("conflict-fix", "Rebase, never merge."),
|
|
238
|
+
("test-author", "Black-box tests only."),
|
|
239
|
+
("plan", "No emoji."),
|
|
240
|
+
("mock-author", "Gate A first."),
|
|
241
|
+
],
|
|
242
|
+
)
|
|
243
|
+
def test_build_command_embeds_claude_md_for_work_shaped_types(
|
|
244
|
+
tmp_path: Path, spec_type: str, rule: str
|
|
245
|
+
) -> None:
|
|
246
|
+
"""#2462: the provider seam — the path real dispatch takes — must embed
|
|
247
|
+
the target repo's CLAUDE.md into --system-prompt for every work-shaped
|
|
248
|
+
leg, since `--bare` disables Claude Code's own auto-discovery of it."""
|
|
249
|
+
repo = _claude_md_repo(tmp_path, f"# Project rules\n\n{rule}\n")
|
|
250
|
+
argv = ClaudeProvider().build_command(_make_spec(type=spec_type, repo_path=str(repo)))
|
|
251
|
+
assert "--bare" in argv
|
|
252
|
+
system_prompt = argv[argv.index("--system-prompt") + 1]
|
|
253
|
+
assert rule in system_prompt
|
|
254
|
+
assert "Project rules (from CLAUDE.md)" in system_prompt
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def test_build_command_no_claude_md_is_a_noop(tmp_path: Path) -> None:
|
|
258
|
+
"""A repo with no CLAUDE.md must not inject an empty section header."""
|
|
259
|
+
argv = ClaudeProvider().build_command(_make_spec(type="work", repo_path=str(tmp_path)))
|
|
260
|
+
system_prompt = argv[argv.index("--system-prompt") + 1]
|
|
261
|
+
assert "Project rules (from CLAUDE.md)" not in system_prompt
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def test_build_command_system_prompt_override_wins_over_claude_md(tmp_path: Path) -> None:
|
|
265
|
+
"""An explicit system_prompt kwarg is used verbatim — the CLAUDE.md embed
|
|
266
|
+
is part of the *computed* prompt only, matching default_worker_command's
|
|
267
|
+
behaviour when a caller supplies its own prompt."""
|
|
268
|
+
repo = _claude_md_repo(tmp_path, "# Project rules\n\nAlways use tabs.\n")
|
|
269
|
+
argv = ClaudeProvider().build_command(
|
|
270
|
+
_make_spec(type="work", repo_path=str(repo)), system_prompt="Custom."
|
|
271
|
+
)
|
|
272
|
+
assert argv[argv.index("--system-prompt") + 1] == "Custom."
|
|
273
|
+
|
|
274
|
+
|
|
190
275
|
def test_resolved_model_overrides_spec_model() -> None:
|
|
191
276
|
"""resolved_model takes precedence over spec.model."""
|
|
192
277
|
spec = _make_spec(type="work", model="sonnet")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/requires.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
{code_coordinator-0.5.189 → code_coordinator-0.5.190}/code_coordinator.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|