code-coordinator 0.5.245__tar.gz → 0.5.247__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.245 → code_coordinator-0.5.247}/.github/workflows/test.yml +11 -0
- code_coordinator-0.5.247/CLAUDE.md +222 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/PKG-INFO +1 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/code_coordinator.egg-info/SOURCES.txt +10 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/code_coordinator.egg-info/scm_file_list.json +10 -0
- code_coordinator-0.5.247/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/agent.py +105 -32
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/audit.py +1 -2
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/auto_loop.py +2 -2
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/board_bool_guard.py +9 -7
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/board_schema.py +7 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/cli.py +6 -2
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/_common.py +52 -21
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/dispatch.py +40 -2
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/dispatch_workers.py +21 -2
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/drive_queue.py +140 -18
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/lifecycle.py +31 -2
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/merge.py +30 -9
- code_coordinator-0.5.247/coord/commands/pr.py +364 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/release.py +30 -2
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/setup.py +7 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/comments.py +61 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/config.py +112 -7
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/conflict_fix.py +56 -20
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/dao.py +13 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/dashboard/server.py +6 -4
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/db.py +143 -45
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy_units.py +106 -6
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/diagnose.py +268 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/drive.py +160 -40
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/drive_queue.py +104 -36
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/drive_state.py +130 -4
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/freshness.py +75 -6
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/github_ops.py +262 -11
- code_coordinator-0.5.247/coord/github_throttle.py +255 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/housekeeping.py +7 -5
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/merge_queue.py +479 -99
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notify.py +221 -16
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/providers/claude.py +27 -10
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/reconcile.py +104 -20
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/reports.py +42 -8
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/review.py +53 -7
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/serve_app.py +179 -21
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/skills/tui-quadraui-workflow/SKILL.md +5 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/smoke.py +20 -4
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/sql.py +121 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/stage_projection.py +31 -2
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/state.py +90 -46
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/usage_rollup.py +8 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coordinator.example.yml +7 -3
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/ARCHITECTURE.md +5 -2
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/COST_DISCIPLINE.md +39 -0
- code_coordinator-0.5.247/docs/OPERATOR_GUIDES.md +66 -0
- code_coordinator-0.5.247/scripts/codegen.py +1290 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/coord-test-runner.sh +27 -22
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/gen_board_fixture.py +5 -4
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/conftest.py +130 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent.py +34 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_graph_self_heal.py +58 -12
- code_coordinator-0.5.247/tests/test_approve_dependency_busy_2804.py +155 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_board_fixture.py +29 -12
- code_coordinator-0.5.247/tests/test_claude_md_budget.py +50 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_drive_queue.py +248 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_merge.py +107 -2
- code_coordinator-0.5.247/tests/test_cli_pr.py +431 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_release_propagate.py +51 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_commands_common.py +48 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_config.py +54 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_conflict_fix.py +207 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_coord_test_runner_toolchain.py +28 -5
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_db.py +3 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deploy_units_lane.py +94 -6
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_drive.py +157 -49
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_drive_queue.py +131 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_drive_state.py +201 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_freshness.py +119 -0
- code_coordinator-0.5.247/tests/test_generated_rust_fixture.py +217 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_github_ops.py +329 -0
- code_coordinator-0.5.247/tests/test_github_throttle.py +188 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_merge_queue.py +531 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notify.py +21 -17
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_platform_paths.py +98 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_providers.py +11 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reconcile.py +128 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reconcile_completions.py +42 -3
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reconcile_merges.py +1 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reports.py +95 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_review.py +90 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_serve.py +415 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_sql_dialect.py +309 -3
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_stage_projection.py +39 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_stalled_pipeline.py +1 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_state.py +189 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_stuck.py +4 -4
- code_coordinator-0.5.247/tests/test_stuck_test_state_watchdog_2803.py +440 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_usage_rollup.py +44 -6
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/data.rs +56 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/doc_tabs.rs +6 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/fixtures.rs +32 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/milestone_dag.rs +32 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/pipeline.rs +86 -1
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/reports.rs +4 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/tests.rs +2687 -0
- code_coordinator-0.5.247/tui/src/app/types/generated.rs +740 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/types.rs +16 -451
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/workspace.rs +2 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/tests/fixtures/board_sample.json +3 -0
- code_coordinator-0.5.245/CLAUDE.md +0 -304
- code_coordinator-0.5.245/code_coordinator.egg-info/scm_version.json +0 -8
- code_coordinator-0.5.245/scripts/codegen.py +0 -358
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/.gitignore +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/GOAL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/LICENSE +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/MANIFEST.in +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/README.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/__init__.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/block_log.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/board_service.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/brain.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/claim.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/client.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/deps.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/events.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/filelock.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/gates.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/goal.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/context.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/models.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/render.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/health/units.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/hooks.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/interactive.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/models.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/network.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/openapi.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/parentage.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/plans.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/progress.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/release_window.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/self_health.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/split_work.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/test_author.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/test_report.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/usage.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/install-agent.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/pyproject.toml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/setup.cfg +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/__init__.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_events.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_init.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_models.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_network.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_session.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_split.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.245 → code_coordinator-0.5.247}/tui/tests/cli.rs +0 -0
|
@@ -309,3 +309,14 @@ jobs:
|
|
|
309
309
|
# Do not re-add a webapp job here. There is no webapp source in this repo
|
|
310
310
|
# for it to run against, and a job that installs Node to build nothing is
|
|
311
311
|
# how the previous `acceptance`-on-every-push waste (#2389) started.
|
|
312
|
+
#
|
|
313
|
+
# #1941: `scripts/codegen.py` also generates coord-tui's RUST wire types
|
|
314
|
+
# (`--rust`), and unlike the TS half above, `tui/` never left this repo —
|
|
315
|
+
# so that drift gate needs no separate job or `coord-web` checkout at all.
|
|
316
|
+
# It rides the ordinary `pytest --ignore=tests/acceptance` runs above, as
|
|
317
|
+
# `tests/test_generated_rust_fixture.py::
|
|
318
|
+
# test_committed_generated_rs_matches_generator_output`, the same way the
|
|
319
|
+
# TS-side `tests/test_generated_types_fixture.py` already rides them for
|
|
320
|
+
# the half of that check this repo can still make (the generator runs and
|
|
321
|
+
# covers every schema; the coord-web byte-comparison itself is that repo's
|
|
322
|
+
# own CI, per the paragraph above).
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# code-coordinator
|
|
2
|
+
|
|
3
|
+
CLI tool + per-machine agent server that coordinates Claude Code workers across multiple machines and repos over Tailscale.
|
|
4
|
+
|
|
5
|
+
> **Scope of this file (#2195).** This is the **worker- and reviewer-facing** rulebook: it is
|
|
6
|
+
> loaded into every worker leg, every review leg, and every coordinator session — and re-read on
|
|
7
|
+
> every turn of each — so it holds only what someone *editing this repo* must act on. Operator
|
|
8
|
+
> runbooks live in [`docs/`](docs/), indexed by
|
|
9
|
+
> [`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md). Settled design rationale lives in
|
|
10
|
+
> [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
|
|
11
|
+
> Keep it that way: **if a new rule does not change what a worker does, it belongs in `docs/`.**
|
|
12
|
+
> Operator sessions — the "dispatch, don't do" rule now lives in
|
|
13
|
+
> [`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md); read it before hand-editing any tracked
|
|
14
|
+
> repo. If you're a worker or reviewer leg, that one isn't for you.
|
|
15
|
+
|
|
16
|
+
## Current Goal — read first
|
|
17
|
+
|
|
18
|
+
**[`GOAL.md`](GOAL.md) holds the current north-star objective** — the living, cross-repo / cross-machine goal that should bias all planning, triage, and dispatch. It is meta-level (above any single issue, repo, or session) and changes as priorities evolve: read it first, plan against it, and keep it current. `coordinator.yml` is the source of truth for *topology*; `GOAL.md` is the source of truth for *intent*.
|
|
19
|
+
|
|
20
|
+
## Codebase navigation — query the graph first
|
|
21
|
+
|
|
22
|
+
This repo ships a **graphify** knowledge graph in `graphify-out/` (`graph.json`,
|
|
23
|
+
`GRAPH_REPORT.md`), kept current on a best-effort basis by git hooks. For any
|
|
24
|
+
architecture / "where is this handled" / "what calls this" / file-relationship
|
|
25
|
+
question, **query the graph first** (the `graphify` skill, or the graphify CLI)
|
|
26
|
+
before reaching for grep/Read. Grep/Read are for exact-string or line-level
|
|
27
|
+
confirmation — not the first move.
|
|
28
|
+
|
|
29
|
+
**In a worktree the graph is the base checkout's, not yours.** A worktree's
|
|
30
|
+
`graphify-out/` is symlinked at the base checkout's graph, so it reflects the
|
|
31
|
+
**base checkout's HEAD, not your edits** — trust it for *"where is X handled"*,
|
|
32
|
+
never for *"did my change land"*. Rebuilds are deliberately disabled inside a
|
|
33
|
+
worktree (a rebuild there would overwrite the shared graph from a feature
|
|
34
|
+
branch).
|
|
35
|
+
|
|
36
|
+
**The graph drifts, and the hooks cannot prevent it** — treat them as an
|
|
37
|
+
optimization, not a guarantee. Check freshness instead: `GRAPH_REPORT.md`
|
|
38
|
+
records its source commit, and **`coord diagnose --graph`** compares that to
|
|
39
|
+
HEAD for every local checkout. If it reports STALE, `graphify update .` in that
|
|
40
|
+
checkout.
|
|
41
|
+
|
|
42
|
+
Setup, the hook mechanics, self-healing, and `coord repo doctor`:
|
|
43
|
+
[`docs/GRAPHIFY_SETUP.md`](docs/GRAPHIFY_SETUP.md).
|
|
44
|
+
|
|
45
|
+
## Architecture
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
coordinator.yml — Single config file: repos, machines, dependencies
|
|
49
|
+
coord CLI — User-facing commands (plan, approve, assign, status, etc.)
|
|
50
|
+
coord agent (per-machine) — HTTP server (port 7433) that runs claude -p
|
|
51
|
+
coord serve — Board daemon (port 7435): canonical board state for thin clients
|
|
52
|
+
coord web — Lightweight dashboard (port 7434)
|
|
53
|
+
claude -p — The actual worker (runs locally on each machine)
|
|
54
|
+
GitHub issues — Work source + message bus (via issue comments)
|
|
55
|
+
Tailscale — Networking between machines
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Full walkthrough — the agent HTTP API, where each subcommand actually runs, the auto-loop end
|
|
59
|
+
to end: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md).
|
|
60
|
+
|
|
61
|
+
## Project Structure
|
|
62
|
+
|
|
63
|
+
Query the **graphify graph** (`graphify-out/`) for the full module map + relationships — it's authoritative and auto-updated. Key entry points: `coord/cli.py` (Click CLI + all subcommands), `coord/agent.py` (`AgentServer`: `claude -p` subprocess mgmt) + `coord/agent_app.py` / `coord/serve_app.py` (agent + board-daemon HTTP apps), `coord/brain.py` (planning), `coord/dispatch.py` (routing: POST to agents, briefings), `coord/review.py` (adversarial review), `coord/merge_queue.py` (merge sequencing) + `coord/reconcile.py` (board↔agent), `coord/state.py` (board persistence in `~/.coord/`), `coord/models.py` (dataclasses), `coord/config.py` (`coordinator.yml` parsing), `coord/dashboard/` (web dashboard + `webapp/` phone PWA). Tests: `tests/test_<module>.py` (pytest; fixtures in `conftest.py`).
|
|
64
|
+
|
|
65
|
+
## Commands
|
|
66
|
+
|
|
67
|
+
`coord <cmd> --help` documents every command + flags. The core loop:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
coord plan # Brain proposes assignments for idle machines
|
|
71
|
+
coord approve 1,3 # Dispatch approved proposals (comma-separated IDs)
|
|
72
|
+
coord assign <machine> <repo> <issue> [--briefing TEXT | --briefing-file F] [--dry-run] # Direct dispatch
|
|
73
|
+
coord status [--freshness] # Machines, assignments, connectivity (+ repo freshness vs GitHub HEADs)
|
|
74
|
+
coord log <id> [-f] [--machine NAME] # claude -p output (remote logs need --machine)
|
|
75
|
+
coord notify # Poll agents, post completion/failure comments to GitHub
|
|
76
|
+
coord test --passed|--fail|--skipped <id> # Record the Test-gate verdict (bare `coord test <id>` builds+tests locally)
|
|
77
|
+
coord merge [--dry-run] [--repo NAME] [--method rebase|squash|merge] [--order IDs] [--force-merge]
|
|
78
|
+
coord reconcile-merges # Backfill missing branches + record out-of-band merges (#609/#611)
|
|
79
|
+
coord retry|stop|resume <id> # Recovery; `coord done` ends the session
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Setup / diagnostics (discoverable via `--help`): `coord init`, `coord config`, `coord agent`, `coord serve`, `coord web`, `coord diagnose`, `coord sessions [--remote]`, `coord split`, `coord notifier`, `coord repo add` / `coord repo doctor`.
|
|
83
|
+
|
|
84
|
+
## Development
|
|
85
|
+
|
|
86
|
+
Always work in a virtualenv. Agent workers are spawned with the agent's own
|
|
87
|
+
pinned venv (`~/.coord-venv` — the live fleet install, not a build artifact)
|
|
88
|
+
stripped from `PATH` and `PIP_REQUIRE_VIRTUALENV=true` set (#402, hardened by
|
|
89
|
+
#2569), so a `pip install` run **without first creating and activating your
|
|
90
|
+
own venv** fails closed instead of silently resolving somewhere unintended
|
|
91
|
+
— and must **never** target the agent's runtime venv. Create your own venv
|
|
92
|
+
in the checkout (`.venv/` is gitignored):
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
python3 -m venv .venv && . .venv/bin/activate && pip install -e ".[dev]"
|
|
96
|
+
pytest
|
|
97
|
+
coord plan --dry-run
|
|
98
|
+
coord approve --dry-run 1,2
|
|
99
|
+
coord assign --dry-run precision claude-coordinator 42
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Never run a bare `pip install` in a worktree as a separate command from venv
|
|
103
|
+
creation (#2569).** The line above is ONE chained command on purpose — a worker
|
|
104
|
+
that ran only `pip install -e ".[dev]"`, split off from the `venv`/`activate`
|
|
105
|
+
step, silently landed it in the live `~/.coord-venv` and cost an 11h fleet
|
|
106
|
+
outage. If you re-run `pip install` later in the same session, first confirm
|
|
107
|
+
`echo $VIRTUAL_ENV` prints your worktree's `.venv`, not empty — never assume
|
|
108
|
+
activation from an earlier command carried forward.
|
|
109
|
+
|
|
110
|
+
**Workers: scope your test run to your diff, never `pytest` bare (#2169).**
|
|
111
|
+
The full suite exceeds Claude Code's 600s Bash ceiling on this repo and
|
|
112
|
+
duplicates the Test stage + CI, which both run it against your pushed SHA
|
|
113
|
+
regardless. Run just the file(s) that mirror what you changed — `pytest
|
|
114
|
+
tests/test_<module>.py` for a `coord/<module>.py` change, `cargo test` from
|
|
115
|
+
`tui/` scoped with a test-name filter for a `tui/**` change. To see what
|
|
116
|
+
the Test stage itself would run for your diff (and confirm you're not
|
|
117
|
+
missing a suite), `scripts/coord-test-runner.sh <worktree> --print-routing`
|
|
118
|
+
computes the routing without actually building or testing anything.
|
|
119
|
+
|
|
120
|
+
## Working on `tui/` — the `quadraui` pin
|
|
121
|
+
|
|
122
|
+
**`coord-tui` pins `quadraui` to a git rev in `tui/Cargo.toml`**
|
|
123
|
+
(`quadraui = { git = "https://github.com/JDonaghy/quadraui", rev = "<sha>" }`, #1973) —
|
|
124
|
+
never edit that `rev` as a shortcut for co-development, and never build `tui/` against
|
|
125
|
+
whatever happens to be checked out in `~/src/quadraui`; a quadraui merge broke coord-tui's
|
|
126
|
+
build with zero coord-tui commits and no warning once already, which is exactly what the pin
|
|
127
|
+
prevents. Bumping the pin deliberately, and building against an unmerged quadraui branch/PR
|
|
128
|
+
without touching the pin, are both procedures — see the `tui-quadraui-workflow` skill
|
|
129
|
+
(`coord/skills/tui-quadraui-workflow/SKILL.md`) for the steps; install it with `coord
|
|
130
|
+
install-skills` if it isn't already on this machine.
|
|
131
|
+
|
|
132
|
+
## Key Design Decisions
|
|
133
|
+
|
|
134
|
+
One line each — the reasoning behind them is in
|
|
135
|
+
[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
|
|
136
|
+
|
|
137
|
+
- **No API key needed.** Everything uses `claude -p`, which runs on a Max/Pro subscription via OAuth.
|
|
138
|
+
- **Agent servers are dumb dispatchers.** They spawn `claude -p` and track the subprocess; all intelligence is in the coordinator brain.
|
|
139
|
+
- **GitHub issue comments are the message bus.** Briefings, completion notices and failure reports are comments, carrying `<!-- coord:... -->` markers for machine parsing.
|
|
140
|
+
- **`coordinator.yml` is the single source of truth** for repo topology, machine capabilities, dependencies, concurrency limits, review settings, smoke-test rules, and the pipeline gate order (`pipeline.default_gates`). It lives in `~/.coord/`, **not** the repo checkout.
|
|
141
|
+
- **User approves everything.** `coord plan` proposes, the user reviews, `coord approve` dispatches. No autonomous dispatch.
|
|
142
|
+
- **Claim detection prevents duplicate work.** Before dispatching, the coordinator checks the board for active assignments and the remote for `issue-{N}-*` branches.
|
|
143
|
+
- **Conflict rules are inferred, not configured.** There is no `file_groups`/`exclusive_files` config and never will be. `coord drive-queue add` compares an issue's own `## Files` declaration against the **real diffs** of in-flight branches in that repo (`coord/overlap_predict.py`, #2247) and, on an overlap, chains the newcomer `--after` the incumbent. **It ORDERS, never refuses** — a false positive costs latency, a refusal costs work. Accuracy is measured, not assumed: `coord drive-queue overlap-report`.
|
|
144
|
+
- **Adversarial reviews are rule-enforcing, not rubber-stamping.** On worker completion a fresh `claude -p` session on a *different* machine reviews the PR diff against this file and the review checklist, with zero shared context with the worker — that's the whole point.
|
|
145
|
+
- **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the headless auto-loop holds review dispatch until there is a `passed`/`skipped` test verdict.
|
|
146
|
+
- **Merge is gated on CI checks (#240).** `coord merge` refuses when a check failed or is still running — and a PR with *zero* reported checks is not automatically clear either (#1904).
|
|
147
|
+
- **Mechanical merge conflicts auto-rebase (#241).** A `type="conflict-fix"` worker rebases and resolves additive merges; semantic conflicts are left for a human.
|
|
148
|
+
- **Smoke tests validate on capable hardware.** `smoke_tests.capability_rules` map changed files to required machine capabilities (e.g. GTK changes → a machine with GTK).
|
|
149
|
+
- **Progress streaming from workers.** Workers emit `STATUS:` and `STUCK:` lines; the coordinator parses these for real-time progress in `coord status` and the dashboard.
|
|
150
|
+
- **The notifier tells you when NOBODY IS COMING — and nothing else (#1632).** Advisory, isolated, off by default; it is not an error channel and not a progress feed.
|
|
151
|
+
|
|
152
|
+
## Review Prompt Assembly
|
|
153
|
+
|
|
154
|
+
The reviewer gets a prompt built from:
|
|
155
|
+
1. **Repo's CLAUDE.md** — the project rules (source of truth, not duplicated)
|
|
156
|
+
2. **Generic checklist** — "did you add tests?", "did you stay in file scope?", "any security issues?"
|
|
157
|
+
3. **Repo overrides** — project-specific patterns from `coordinator.yml` `reviews.repo_overrides`
|
|
158
|
+
4. **The diff** — `gh pr diff` of the worker's branch vs base
|
|
159
|
+
5. **The issue** — title and body for intent verification
|
|
160
|
+
|
|
161
|
+
The reviewer reads the rules and enforces them against the diff. It does not have the worker's session context — genuinely independent.
|
|
162
|
+
|
|
163
|
+
## Rules for workers
|
|
164
|
+
|
|
165
|
+
- **Only the coordinator writes docs.** Workers must **not** update README, CHANGELOG, or shared documentation files — parallel doc edits cause merge conflicts. If a briefing lists docs in `files_forbidden`, respect it. An issue whose *entire* deliverable is a doc edit is coordinator work and should never have been dispatched; say so and stop rather than editing the doc.
|
|
166
|
+
- **Never edit the sealed suite — which is `tests/acceptance/**` *plus every declared driver entrypoint*.** Those suites are delivered read-only / run-only; write your own unit and internal tests instead. **In this repo the sealed set includes `tui/tests/acceptance.rs`** — it is the `tui-tuidriver` driver's `entrypoint:`, and an entrypoint is sealed as a whole file, so it is sealed despite living nowhere near `tests/acceptance/`. Do not be reassured by its prologue calling itself "a seam smoke test": *any* `type="work"` diff touching a sealed path is an **unconditional, mandatory `request-changes`** (`coord/review.py`), and the additive-only carve-out applies only to `test-author` / `mock-author` dispatches. TuiDriver tests belong **in-crate** under `#[cfg(test)]` anyway — see the coord-tui section below. The authoritative list is `AcceptanceConfig.sealed_paths()` in `coord/config.py`; if a briefing's `## Files` names a sealed path, that briefing is wrong — say so and put the test somewhere else rather than following it.
|
|
167
|
+
- **Stay in file scope.** If you must touch a file outside your briefing, note it in your final message.
|
|
168
|
+
- **Commit and push before your final message** — even if the build is broken or you ran out of time. Uncommitted work is destroyed when the session ends.
|
|
169
|
+
- **`gh` is on the deny-list.** The coordinator owns all GitHub interaction; use plain `git`.
|
|
170
|
+
|
|
171
|
+
The operator-side counterparts to these rules — dispatch economics, what to send to a worker
|
|
172
|
+
versus keep in the coordinator session, and the coordinator session's own
|
|
173
|
+
`coord`-seam-over-`gh` rule — are in [`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md).
|
|
174
|
+
|
|
175
|
+
## Testing — black-box coverage is the acceptance bar
|
|
176
|
+
|
|
177
|
+
**Every PR that changes user-visible behavior must ship a black-box test** that drives the *running app* and asserts on its rendered output — not just unit tests on internal functions. The adversarial reviewer reads this file and **rejects behavior-changing PRs that lack one** (pure refactors / internal-only changes are exempt — say so in the PR if that applies). Build the **harness once per repo**; add **tests incrementally, one (or a few) per behavior-changing issue** — do *not* big-bang a full suite. Coverage then grows with churn and ratchets up (PRs add coverage, never remove it). Keep a thin **core smoke set** over the few most-trafficked screens so critical flows stay guarded even by unrelated changes.
|
|
178
|
+
|
|
179
|
+
> **In an oracle-loop milestone the worker does NOT author the acceptance tests**
|
|
180
|
+
> ([`docs/ORACLE_LOOP.md`](docs/ORACLE_LOOP.md)). An independent `test-author` agent writes them
|
|
181
|
+
> from a mock-first Gate-A contract, and they are delivered **read-only / run-only** (`coord
|
|
182
|
+
> acceptance run --issue N`). You iterate against them **in your own warm session** until green;
|
|
183
|
+
> the coordinator then re-runs the sealed suite **externally** against your pushed SHA as the
|
|
184
|
+
> trust gate. You still write your **own unit/internal tests** — and must **never** edit
|
|
185
|
+
> `tests/acceptance/**`. Which framework drivers actually exist is `SUPPORTED_KINDS` in
|
|
186
|
+
> `coord/acceptance_drivers.py`, the source of truth: a kind may be *declared* in
|
|
187
|
+
> `coordinator.yml` ahead of its adapter, and `run_driver()` then rejects it rather than
|
|
188
|
+
> silently no-opping.
|
|
189
|
+
|
|
190
|
+
**How it runs:** black-box tests are part of the repo's normal test command, so the **Test stage** executes them on a capability-matched machine — `smoke_tests.capability_rules` route platform-specific suites to capable hardware (a GTK box; a machine with a browser). Favor the automated pre-review gate; the point is to trust the suite so manual/interactive smoke (incl. driving from a phone) is rarely needed.
|
|
191
|
+
|
|
192
|
+
### coord-tui — quadraui `TuiDriver` (harness shipped: #690 / #691)
|
|
193
|
+
- Drives the whole app through the real `event → handle → render` path against ratatui's headless `TestBackend` and asserts on the screen grid. `cargo test`-native, deterministic, no TTY.
|
|
194
|
+
- `CoordApp` implements quadraui's `ShellApp`, so use `quadraui::tui::testing::driver_with_shell(app, CoordApp::shell_config(), w, h)`. API: `find("text")` → coords, `click(x, y)`, `press`, `type_char`, `screen()`, `screen_contains(needle)`. **Locate targets with `find` — never hardcode coordinates.**
|
|
195
|
+
- **Reuse the existing fixtures** — `make_test_app(data: BoardData) -> CoordApp` (and `make_app_with_assignments`, `make_app_with_one_completed_issue`, …) in `tui/src/app.rs` build a full app from in-memory `BoardData`, no live daemon. Put the tests **in-crate** (`#[cfg(test)]`), **not** in `tui/tests/` — the fixtures are `#[cfg(test)]`/private and an integration-test crate can't see them.
|
|
196
|
+
- Limit: `TuiDriver` renders to `TestBackend`, so it does **not** parse real ANSI — terminal-protocol bugs (raw-mode, SGR mouse, the embedded `claude` PTY pane) are out of reach and still need a live smoke. A native pty + vt100 tier is tracked in quadraui#302 (unbuilt).
|
|
197
|
+
|
|
198
|
+
### coord web (Phone Control Center)
|
|
199
|
+
- The phone web app lives in `coord/dashboard/webapp/` (React / Vite / TS PWA, served by `coord/dashboard/server.py`). **Build the bundle before first use** — `dist/` is gitignored: `npm install && npm run build` from `coord/dashboard/webapp/`, re-run after pulling changes to `src/`. The server falls back to the legacy `index.html` when `dist/` is absent.
|
|
200
|
+
- **Vitest unit tests** live in `coord/dashboard/webapp/src/components/__tests__/` (`npm test`). **Playwright E2E** specs live in `coord/dashboard/webapp/e2e/` (`npm run test:e2e`) and are the acceptance bar — browsers headless-test more cleanly than terminals, so lean on this gate rather than interactive smoke.
|
|
201
|
+
- **Those E2E specs are a smoke net, not a deterministic oracle** — the seeded-board fixture server (#1538) is not shipped, so they run against whatever the live fleet is doing.
|
|
202
|
+
- **A webapp change may not be testable at all right now.** `browser` is advertised by one machine and its probe has read UNMET since 2026-08-01 (#1678), so `dispatch_smoke` refuses to route `coord/dashboard/webapp/**` and the Test stage retries forever — check `coord doctor` before assuming otherwise.
|
|
203
|
+
- Full runbook — serve, phone access over Tailscale, the `/api/pipeline` surface: [`docs/PHONE_WEBAPP.md`](docs/PHONE_WEBAPP.md).
|
|
204
|
+
|
|
205
|
+
## Conventions
|
|
206
|
+
|
|
207
|
+
- Python 3.12+, type hints everywhere
|
|
208
|
+
- Click for CLI
|
|
209
|
+
- httpx for HTTP client, Starlette + uvicorn for HTTP server
|
|
210
|
+
- PyYAML for config
|
|
211
|
+
- No Anthropic SDK — all Claude interaction is via `claude -p` subprocess
|
|
212
|
+
- Tests use pytest with fixtures in conftest.py
|
|
213
|
+
- State files go in `~/.coord/` — including `coordinator.yml` (canonical: `~/.coord/coordinator.yml`; override with `$COORD_CONFIG` or `--config`; `./coordinator.yml` is a dev fallback)
|
|
214
|
+
- Agent server port: 7433, dashboard port: 7434, board daemon port: 7435
|
|
215
|
+
- GitHub issue comments carry `<!-- coord:event=... assignment=... -->` markers for machine parsing
|
|
216
|
+
|
|
217
|
+
## Operating the fleet — operator-facing
|
|
218
|
+
|
|
219
|
+
**Not needed to work on this repo.** A worker or reviewer can stop reading here. Every operator
|
|
220
|
+
runbook — the pre-flight gotchas, agent installs and releases, the drive queue, the customer
|
|
221
|
+
portal, and the two deploy facts that bite most often — is indexed in
|
|
222
|
+
[`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md).
|
|
@@ -84,6 +84,7 @@ coord/gate_b.py
|
|
|
84
84
|
coord/gate_snapshot.py
|
|
85
85
|
coord/gates.py
|
|
86
86
|
coord/github_ops.py
|
|
87
|
+
coord/github_throttle.py
|
|
87
88
|
coord/goal.py
|
|
88
89
|
coord/graph_health.py
|
|
89
90
|
coord/hooks.py
|
|
@@ -170,6 +171,7 @@ coord/commands/milestone.py
|
|
|
170
171
|
coord/commands/plan_followup.py
|
|
171
172
|
coord/commands/plans.py
|
|
172
173
|
coord/commands/portal.py
|
|
174
|
+
coord/commands/pr.py
|
|
173
175
|
coord/commands/release.py
|
|
174
176
|
coord/commands/repo.py
|
|
175
177
|
coord/commands/report.py
|
|
@@ -309,6 +311,7 @@ docs/MERGE_AUTO_DRAIN_TRUST_BAR.md
|
|
|
309
311
|
docs/NOTIFIER.md
|
|
310
312
|
docs/OPENCODE_VERIFICATION.md
|
|
311
313
|
docs/OPERATING_GOTCHAS.md
|
|
314
|
+
docs/OPERATOR_GUIDES.md
|
|
312
315
|
docs/ORACLE_LOOP.md
|
|
313
316
|
docs/PHONE_WEBAPP.md
|
|
314
317
|
docs/PIPELINE_V2.md
|
|
@@ -378,6 +381,7 @@ tests/test_agent_update_bluegreen.py
|
|
|
378
381
|
tests/test_agent_usage_limit.py
|
|
379
382
|
tests/test_agent_zero_commit.py
|
|
380
383
|
tests/test_ambient_home_isolation.py
|
|
384
|
+
tests/test_approve_dependency_busy_2804.py
|
|
381
385
|
tests/test_approve_reject_plan.py
|
|
382
386
|
tests/test_approve_usage_gate.py
|
|
383
387
|
tests/test_approved_work_2532.py
|
|
@@ -408,6 +412,7 @@ tests/test_ci_gitlab.py
|
|
|
408
412
|
tests/test_ci_parity_2091.py
|
|
409
413
|
tests/test_ci_store.py
|
|
410
414
|
tests/test_claim.py
|
|
415
|
+
tests/test_claude_md_budget.py
|
|
411
416
|
tests/test_cli_acceptance.py
|
|
412
417
|
tests/test_cli_assign.py
|
|
413
418
|
tests/test_cli_assign_interactive_oracle_gate.py
|
|
@@ -449,6 +454,7 @@ tests/test_cli_network.py
|
|
|
449
454
|
tests/test_cli_new_issue_chat.py
|
|
450
455
|
tests/test_cli_plans.py
|
|
451
456
|
tests/test_cli_portal.py
|
|
457
|
+
tests/test_cli_pr.py
|
|
452
458
|
tests/test_cli_pull_artifact.py
|
|
453
459
|
tests/test_cli_queue.py
|
|
454
460
|
tests/test_cli_reattach_sessions.py
|
|
@@ -548,8 +554,10 @@ tests/test_gate_snapshot_staleness.py
|
|
|
548
554
|
tests/test_gates.py
|
|
549
555
|
tests/test_gather_fleet_tmux_sessions.py
|
|
550
556
|
tests/test_gen_mock_index.py
|
|
557
|
+
tests/test_generated_rust_fixture.py
|
|
551
558
|
tests/test_generated_types_fixture.py
|
|
552
559
|
tests/test_github_ops.py
|
|
560
|
+
tests/test_github_throttle.py
|
|
553
561
|
tests/test_goal.py
|
|
554
562
|
tests/test_graph_health.py
|
|
555
563
|
tests/test_graph_selfheal_absent_2237.py
|
|
@@ -706,6 +714,7 @@ tests/test_status_fleet_footer.py
|
|
|
706
714
|
tests/test_stop_1567.py
|
|
707
715
|
tests/test_store_contract.py
|
|
708
716
|
tests/test_stuck.py
|
|
717
|
+
tests/test_stuck_test_state_watchdog_2803.py
|
|
709
718
|
tests/test_terminal_command.py
|
|
710
719
|
tests/test_test_author.py
|
|
711
720
|
tests/test_test_chat.py
|
|
@@ -848,6 +857,7 @@ tui/src/app/terminal.rs
|
|
|
848
857
|
tui/src/app/tests.rs
|
|
849
858
|
tui/src/app/types.rs
|
|
850
859
|
tui/src/app/workspace.rs
|
|
860
|
+
tui/src/app/types/generated.rs
|
|
851
861
|
tui/src/bin/gtk.rs
|
|
852
862
|
tui/tests/acceptance.rs
|
|
853
863
|
tui/tests/cli.rs
|
{code_coordinator-0.5.245 → code_coordinator-0.5.247}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
"coord/commands/plan_followup.py",
|
|
69
69
|
"coord/commands/plans.py",
|
|
70
70
|
"coord/commands/portal.py",
|
|
71
|
+
"coord/commands/pr.py",
|
|
71
72
|
"coord/commands/release.py",
|
|
72
73
|
"coord/commands/repo.py",
|
|
73
74
|
"coord/commands/report.py",
|
|
@@ -133,6 +134,7 @@
|
|
|
133
134
|
"coord/gate_snapshot.py",
|
|
134
135
|
"coord/gates.py",
|
|
135
136
|
"coord/github_ops.py",
|
|
137
|
+
"coord/github_throttle.py",
|
|
136
138
|
"coord/goal.py",
|
|
137
139
|
"coord/graph_health.py",
|
|
138
140
|
"coord/health/__init__.py",
|
|
@@ -301,6 +303,7 @@
|
|
|
301
303
|
"docs/NOTIFIER.md",
|
|
302
304
|
"docs/OPENCODE_VERIFICATION.md",
|
|
303
305
|
"docs/OPERATING_GOTCHAS.md",
|
|
306
|
+
"docs/OPERATOR_GUIDES.md",
|
|
304
307
|
"docs/ORACLE_LOOP.md",
|
|
305
308
|
"docs/PHONE_WEBAPP.md",
|
|
306
309
|
"docs/PIPELINE_V2.md",
|
|
@@ -450,6 +453,7 @@
|
|
|
450
453
|
"tests/test_agent_usage_limit.py",
|
|
451
454
|
"tests/test_agent_zero_commit.py",
|
|
452
455
|
"tests/test_ambient_home_isolation.py",
|
|
456
|
+
"tests/test_approve_dependency_busy_2804.py",
|
|
453
457
|
"tests/test_approve_reject_plan.py",
|
|
454
458
|
"tests/test_approve_usage_gate.py",
|
|
455
459
|
"tests/test_approved_work_2532.py",
|
|
@@ -480,6 +484,7 @@
|
|
|
480
484
|
"tests/test_ci_parity_2091.py",
|
|
481
485
|
"tests/test_ci_store.py",
|
|
482
486
|
"tests/test_claim.py",
|
|
487
|
+
"tests/test_claude_md_budget.py",
|
|
483
488
|
"tests/test_cli_acceptance.py",
|
|
484
489
|
"tests/test_cli_assign.py",
|
|
485
490
|
"tests/test_cli_assign_interactive_oracle_gate.py",
|
|
@@ -521,6 +526,7 @@
|
|
|
521
526
|
"tests/test_cli_new_issue_chat.py",
|
|
522
527
|
"tests/test_cli_plans.py",
|
|
523
528
|
"tests/test_cli_portal.py",
|
|
529
|
+
"tests/test_cli_pr.py",
|
|
524
530
|
"tests/test_cli_pull_artifact.py",
|
|
525
531
|
"tests/test_cli_queue.py",
|
|
526
532
|
"tests/test_cli_reattach_sessions.py",
|
|
@@ -620,8 +626,10 @@
|
|
|
620
626
|
"tests/test_gates.py",
|
|
621
627
|
"tests/test_gather_fleet_tmux_sessions.py",
|
|
622
628
|
"tests/test_gen_mock_index.py",
|
|
629
|
+
"tests/test_generated_rust_fixture.py",
|
|
623
630
|
"tests/test_generated_types_fixture.py",
|
|
624
631
|
"tests/test_github_ops.py",
|
|
632
|
+
"tests/test_github_throttle.py",
|
|
625
633
|
"tests/test_goal.py",
|
|
626
634
|
"tests/test_graph_health.py",
|
|
627
635
|
"tests/test_graph_selfheal_absent_2237.py",
|
|
@@ -778,6 +786,7 @@
|
|
|
778
786
|
"tests/test_stop_1567.py",
|
|
779
787
|
"tests/test_store_contract.py",
|
|
780
788
|
"tests/test_stuck.py",
|
|
789
|
+
"tests/test_stuck_test_state_watchdog_2803.py",
|
|
781
790
|
"tests/test_terminal_command.py",
|
|
782
791
|
"tests/test_test_author.py",
|
|
783
792
|
"tests/test_test_chat.py",
|
|
@@ -837,6 +846,7 @@
|
|
|
837
846
|
"tui/src/app/terminal.rs",
|
|
838
847
|
"tui/src/app/tests.rs",
|
|
839
848
|
"tui/src/app/types.rs",
|
|
849
|
+
"tui/src/app/types/generated.rs",
|
|
840
850
|
"tui/src/app/workspace.rs",
|
|
841
851
|
"tui/src/bin/gtk.rs",
|
|
842
852
|
"tui/src/commands.rs",
|
|
@@ -39,9 +39,29 @@ if TYPE_CHECKING:
|
|
|
39
39
|
from coord.providers.claude_pty import ClaudePtyProvider
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
DEFAULT_STATE_DIR = default_coord_dir()
|
|
43
42
|
DEFAULT_WORKER_BINARY = "claude"
|
|
44
43
|
|
|
44
|
+
# DEFAULT_STATE_DIR is resolved lazily via __getattr__ below (#2781), not
|
|
45
|
+
# bound here at import time -- see that function's docstring.
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def __getattr__(name: str) -> Path:
|
|
49
|
+
"""PEP 562 lazy fallback for ``DEFAULT_STATE_DIR`` (#2781).
|
|
50
|
+
|
|
51
|
+
Pre-#2781 this was bound eagerly at import time, so ``$COORD_DIR`` set
|
|
52
|
+
*after* this module was first imported -- e.g. by a pytest fixture --
|
|
53
|
+
never reached it, unlike :func:`default_coord_dir` itself which is
|
|
54
|
+
"computed fresh on every call" by design. This only engages when the
|
|
55
|
+
name hasn't been bound directly in this module's namespace, so
|
|
56
|
+
``monkeypatch.setattr(coord.agent, "DEFAULT_STATE_DIR", ...)`` (used
|
|
57
|
+
throughout the test suite) still takes priority exactly as before:
|
|
58
|
+
Python calls ``__getattr__`` only when normal attribute lookup fails.
|
|
59
|
+
"""
|
|
60
|
+
if name == "DEFAULT_STATE_DIR":
|
|
61
|
+
return default_coord_dir()
|
|
62
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
63
|
+
|
|
64
|
+
|
|
45
65
|
# Module logger — surfaced in the daemon / agent server logs so agent-side
|
|
46
66
|
# events (e.g. #1295 "sweep would touch a live worktree", "stash copied 0
|
|
47
67
|
# files") are visible without having to open the per-assignment log file.
|
|
@@ -3145,7 +3165,7 @@ def setup_interactive_worktree(
|
|
|
3145
3165
|
:class:`OSError`: when the worktree base directory cannot be created.
|
|
3146
3166
|
"""
|
|
3147
3167
|
if state_dir is None:
|
|
3148
|
-
state_dir = DEFAULT_STATE_DIR
|
|
3168
|
+
state_dir = sys.modules[__name__].DEFAULT_STATE_DIR
|
|
3149
3169
|
|
|
3150
3170
|
worktree_base = state_dir / "worktrees"
|
|
3151
3171
|
worktree_path = worktree_base / assignment_id
|
|
@@ -4505,11 +4525,14 @@ def _base_checkout_write_guard_tools(repo_path: str) -> list[str]:
|
|
|
4505
4525
|
# dispatch on every machine started failing at turn 1 with "Not logged in"
|
|
4506
4526
|
# within the hour it went live (misreported fleet-wide as generic
|
|
4507
4527
|
# `api_error`). Reverted back to `--setting-sources user` to restore
|
|
4508
|
-
# dispatch immediately. The hooks/.mcp.json leak this was meant to close
|
|
4509
|
-
# real
|
|
4528
|
+
# dispatch immediately. The hooks/.mcp.json leak this was meant to close was
|
|
4529
|
+
# real; #2820 closed the `.mcp.json`/MCP-server half of it via
|
|
4530
|
+
# `--strict-mcp-config` in `default_worker_command` (no OAuth side-effect —
|
|
4531
|
+
# it only strips MCP server definitions, not hooks). The hooks half is
|
|
4532
|
+
# still open — re-closing it needs a fix that doesn't require
|
|
4510
4533
|
# `ANTHROPIC_API_KEY`/an `apiKeyHelper` (e.g. explicit `--settings '{}'`
|
|
4511
|
-
# plus verifying whether hooks
|
|
4512
|
-
#
|
|
4534
|
+
# plus verifying whether hooks can be suppressed without full `--bare`),
|
|
4535
|
+
# tracked as a fresh follow-up rather than re-landing this as-is.
|
|
4513
4536
|
_DENY_PATTERN_RE = re.compile(r"^(Edit|Write)\(//(.+)\)$")
|
|
4514
4537
|
|
|
4515
4538
|
|
|
@@ -4656,14 +4679,25 @@ def check_worktree_writable(
|
|
|
4656
4679
|
def _claude_md_system_prompt_suffix(repo_path: str) -> str:
|
|
4657
4680
|
"""Return a system-prompt suffix embedding the target repo's CLAUDE.md.
|
|
4658
4681
|
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4682
|
+
Worker dispatch below passes ``--setting-sources user`` — **not**
|
|
4683
|
+
``--bare``, which #2462 tried and reverted same-day (see the long
|
|
4684
|
+
comment in :func:`default_worker_command`). ``--setting-sources user``
|
|
4685
|
+
suppresses Claude Code's own project-level CLAUDE.md auto-discovery
|
|
4686
|
+
(along with project/local settings.json) just as thoroughly as
|
|
4687
|
+
``--bare`` would have, for this one mechanism. #2820 measured it
|
|
4688
|
+
directly with four controlled probes: an empty dir and a real repo
|
|
4689
|
+
checkout, both under ``--setting-sources user``, differ by only ~200
|
|
4690
|
+
prompt-framing tokens (22,489 vs 22,686) — essentially no CLAUDE.md
|
|
4691
|
+
content leaking through. The same repo under Claude Code's *default*
|
|
4692
|
+
setting sources adds ~7,675 tokens (30,361) for the auto-discovered
|
|
4693
|
+
file. So this function is **not** defense-in-depth alongside some
|
|
4694
|
+
still-running ambient auto-discovery — it is the **only** mechanism
|
|
4695
|
+
that delivers the target repo's CLAUDE.md to a work-shaped ``-p`` leg.
|
|
4696
|
+
Nothing else in a work-shaped leg's briefing embeds the target repo's
|
|
4697
|
+
actual CLAUDE.md text, so without this a worker would silently lose
|
|
4698
|
+
every per-repo convention, testing rule, and sealed-path note that
|
|
4699
|
+
isn't hardcoded into the repo-agnostic ``WORKER_SYSTEM_PROMPT`` — with
|
|
4700
|
+
no error and no test failing to surface the loss.
|
|
4667
4701
|
|
|
4668
4702
|
Mirrors :func:`coord.review.read_repo_claude_md`, which the review leg
|
|
4669
4703
|
already uses for the same reason (a review must never run blind to
|
|
@@ -4703,8 +4737,10 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4703
4737
|
"""
|
|
4704
4738
|
if spec.type == "plan":
|
|
4705
4739
|
system_prompt = spec.system_prompt if spec.system_prompt else WORKER_PLAN_PROMPT
|
|
4706
|
-
#
|
|
4707
|
-
# needs the target repo's conventions to plan
|
|
4740
|
+
# `--setting-sources user` (below) drops CLAUDE.md auto-discovery; a
|
|
4741
|
+
# plan leg still needs the target repo's conventions to plan
|
|
4742
|
+
# against. See _claude_md_system_prompt_suffix for what the flag
|
|
4743
|
+
# actually does and the measured numbers behind it.
|
|
4708
4744
|
system_prompt += _claude_md_system_prompt_suffix(spec.repo_path)
|
|
4709
4745
|
allowed_tools = "Read,Bash"
|
|
4710
4746
|
elif spec.type == "refinement":
|
|
@@ -4773,7 +4809,8 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4773
4809
|
# and deny list instead of the generic WORKER_SYSTEM_PROMPT.
|
|
4774
4810
|
system_prompt = spec.system_prompt if spec.system_prompt else MOCK_AUTHOR_SYSTEM_PROMPT
|
|
4775
4811
|
system_prompt += build_deny_prompt(MOCK_AUTHOR_DENY_COMMANDS)
|
|
4776
|
-
#
|
|
4812
|
+
# `--setting-sources user` (below) drops CLAUDE.md auto-discovery —
|
|
4813
|
+
# see _claude_md_system_prompt_suffix.
|
|
4777
4814
|
system_prompt += _claude_md_system_prompt_suffix(spec.repo_path)
|
|
4778
4815
|
allowed_tools = "Read,Edit,Write,Bash"
|
|
4779
4816
|
elif spec.type == "smoke":
|
|
@@ -4826,10 +4863,11 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4826
4863
|
else:
|
|
4827
4864
|
system_prompt = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
|
|
4828
4865
|
system_prompt += build_deny_prompt(spec.deny_commands)
|
|
4829
|
-
#
|
|
4830
|
-
# branch too — it covers "work", "fix",
|
|
4831
|
-
# "test-author", every one of which edits code
|
|
4832
|
-
# target repo's conventions. See
|
|
4866
|
+
# `--setting-sources user` (below) drops CLAUDE.md auto-discovery
|
|
4867
|
+
# for this catch-all branch too — it covers "work", "fix",
|
|
4868
|
+
# "conflict-fix", and "test-author", every one of which edits code
|
|
4869
|
+
# and needs the target repo's conventions. See
|
|
4870
|
+
# _claude_md_system_prompt_suffix.
|
|
4833
4871
|
system_prompt += _claude_md_system_prompt_suffix(spec.repo_path)
|
|
4834
4872
|
# #2169: `Monitor` is the sanctioned way to poll a backgrounded
|
|
4835
4873
|
# long-running command in bounded steps (see the ONE-SHOT section of
|
|
@@ -4891,19 +4929,52 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4891
4929
|
# OAuth"). It went live and broke every worker dispatch fleet-wide
|
|
4892
4930
|
# within the hour ("Not logged in · Please run /login", misreported
|
|
4893
4931
|
# as generic `api_error`) — reverted back to `--setting-sources user`
|
|
4894
|
-
# same-day. The hooks/.mcp.json leak `--bare`
|
|
4895
|
-
#
|
|
4896
|
-
#
|
|
4897
|
-
#
|
|
4932
|
+
# same-day. The hooks/.mcp.json leak `--bare` would have closed was
|
|
4933
|
+
# real; #2820 closed the `.mcp.json`/MCP-server half of it below
|
|
4934
|
+
# with `--strict-mcp-config`, which has no OAuth side-effect (it
|
|
4935
|
+
# only strips project/user-scope MCP server definitions, nothing
|
|
4936
|
+
# else `--bare` touched). The hooks half is still open; re-closing
|
|
4937
|
+
# it needs an approach that doesn't require `ANTHROPIC_API_KEY`/an
|
|
4938
|
+
# `apiKeyHelper`, tracked as a fresh follow-up rather than
|
|
4939
|
+
# re-landing `--bare` as-is.
|
|
4898
4940
|
#
|
|
4899
4941
|
# `_claude_md_system_prompt_suffix` (see the "plan", "mock-author",
|
|
4900
4942
|
# and catch-all "else" branches above) explicitly embeds the target
|
|
4901
|
-
# repo's CLAUDE.md into --system-prompt
|
|
4902
|
-
#
|
|
4903
|
-
#
|
|
4904
|
-
#
|
|
4905
|
-
#
|
|
4943
|
+
# repo's CLAUDE.md into --system-prompt — this is NOT defense-in-
|
|
4944
|
+
# depth alongside some still-running ambient auto-discovery.
|
|
4945
|
+
# #2820 measured that `--setting-sources user` *suppresses* Claude
|
|
4946
|
+
# Code's own project CLAUDE.md auto-discovery: a real repo checkout
|
|
4947
|
+
# under `--setting-sources user` costs ~22,686 prompt tokens vs.
|
|
4948
|
+
# ~30,361 under Claude Code's *default* setting sources — a
|
|
4949
|
+
# ~7,675-token gap that is almost entirely the auto-discovered
|
|
4950
|
+
# file. So `_claude_md_system_prompt_suffix` is the ONLY mechanism
|
|
4951
|
+
# that delivers the target repo's CLAUDE.md to a work-shaped `-p`
|
|
4952
|
+
# leg; treating it as redundant and dropping it would silently
|
|
4953
|
+
# strip every per-repo convention, with no error and no test
|
|
4954
|
+
# failing to surface the loss.
|
|
4906
4955
|
"--setting-sources", "user",
|
|
4956
|
+
# #2820: every `-p` leg otherwise also loads the OPERATOR's
|
|
4957
|
+
# personal user-scope MCP servers — observed across the 120 most
|
|
4958
|
+
# recent worker sessions as 20 Google Drive/Calendar tool defs plus
|
|
4959
|
+
# a Gmail server on 111/120 legs, a smaller subset on 3 more, and 0
|
|
4960
|
+
# on the remaining 6 (i.e. non-deterministic: the same dispatch
|
|
4961
|
+
# shape gets a different tool surface depending on whether the
|
|
4962
|
+
# operator's MCP servers happened to connect by the time the
|
|
4963
|
+
# session started). No worker can ever use any of those tools.
|
|
4964
|
+
# `--strict-mcp-config` ignores all project/user `.mcp.json`
|
|
4965
|
+
# servers for this invocation (with no `--mcp-config` passed, that
|
|
4966
|
+
# means none load) — `--setting-sources user` above does NOT cover
|
|
4967
|
+
# this, it only gates settings.json. Measured cost of leaving this
|
|
4968
|
+
# open is small — two controlled `claude -p` probes with the
|
|
4969
|
+
# production flags went from 47 tools / 23,096 prompt tokens
|
|
4970
|
+
# without this flag to 27 tools / 22,483 tokens with it, i.e.
|
|
4971
|
+
# ~600 tokens, not the several-thousand a raw tool-count drop
|
|
4972
|
+
# suggests (MCP tool schemas are deferred behind ToolSearch in
|
|
4973
|
+
# current Claude Code, so an unused server costs a name, not a
|
|
4974
|
+
# schema). Worth doing anyway: one flag, no OAuth side-effect, and
|
|
4975
|
+
# it makes the worker tool surface deterministic — not worth doing
|
|
4976
|
+
# as a cost measure on its own.
|
|
4977
|
+
"--strict-mcp-config",
|
|
4907
4978
|
]
|
|
4908
4979
|
if spec.model:
|
|
4909
4980
|
argv.extend(["--model", spec.model])
|
|
@@ -5005,7 +5076,7 @@ class AgentServer:
|
|
|
5005
5076
|
machine_name: str,
|
|
5006
5077
|
capabilities: Iterable[str] = (),
|
|
5007
5078
|
repos: Iterable[str] = (),
|
|
5008
|
-
state_dir: Path =
|
|
5079
|
+
state_dir: Path | None = None,
|
|
5009
5080
|
worker_command: WorkerCommandBuilder | None = None,
|
|
5010
5081
|
repo_paths: dict[str, str] | None = None,
|
|
5011
5082
|
# RESTART-ONLY (#2299). These two are read by `_spawn` for every
|
|
@@ -5078,7 +5149,9 @@ class AgentServer:
|
|
|
5078
5149
|
self.repo_paths = dict(repo_paths or {})
|
|
5079
5150
|
self.artifact_paths: dict[str, list[str]] = dict(artifact_paths or {})
|
|
5080
5151
|
self.build_commands: dict[str, str] = dict(build_commands or {})
|
|
5081
|
-
self.state_dir = Path(
|
|
5152
|
+
self.state_dir = Path(
|
|
5153
|
+
state_dir if state_dir is not None else sys.modules[__name__].DEFAULT_STATE_DIR
|
|
5154
|
+
)
|
|
5082
5155
|
self.log_dir = self.state_dir / "logs"
|
|
5083
5156
|
self.state_path = self.state_dir / "agent_state.json"
|
|
5084
5157
|
self.worker_command = worker_command or default_worker_command
|