code-coordinator 0.5.507__tar.gz → 0.5.508__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.507 → code_coordinator-0.5.508}/CLAUDE.md +37 -61
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/PKG-INFO +1 -1
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agent.py +134 -18
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/claude.py +18 -20
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ARCHITECTURE.md +15 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/OPERATOR_GUIDES.md +23 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent.py +123 -3
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_claude_md_budget.py +9 -5
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_providers.py +104 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.gitignore +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/GOAL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/LICENSE +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/MANIFEST.in +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/README.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/__init__.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/audit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/backup.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/block_log.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/board_service.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/brain.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/claim.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/cli.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/client.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/codegen.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/comments.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/config.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dao.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/db.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deps.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/drive.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/events.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/filelock.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/freshness.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gates.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/goal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/context.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/models.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/render.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/units.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/hooks.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/interactive.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/models.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/network.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notify.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/openapi.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/parentage.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/plans.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/progress.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/release_window.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/reports.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/review.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/self_health.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/smoke.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/split_work.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/sql.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/state.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/test_author.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/test_report.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/usage.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/install-agent.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/pyproject.toml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/setup.cfg +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/__init__.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/backends.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/conftest.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_client.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_db.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_events.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_init.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_models.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_network.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_session.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_split.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_state.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/write_parity.py +0 -0
|
@@ -2,20 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
CLI tool + per-machine agent server that coordinates Claude Code workers across multiple machines and repos over Tailscale.
|
|
4
4
|
|
|
5
|
-
> **Scope of this file (#2195).** This is the **worker- and reviewer-facing**
|
|
6
|
-
> loaded into every worker leg, every review leg
|
|
7
|
-
> every turn of each
|
|
8
|
-
>
|
|
9
|
-
> [`docs
|
|
10
|
-
>
|
|
11
|
-
>
|
|
12
|
-
>
|
|
13
|
-
> [`docs/
|
|
14
|
-
>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
> **Scope of this file (#2195, #2817).** This is the **worker- and reviewer-facing**
|
|
6
|
+
> rulebook: it is loaded into every worker leg, every review leg and every coordinator
|
|
7
|
+
> session — and re-read on **every turn** of each, so every byte here is a recurring
|
|
8
|
+
> fleet-wide cost. It holds only what someone *editing this repo* must act on.
|
|
9
|
+
> **If a new rule does not change what a worker does, it belongs in [`docs/`](docs/).**
|
|
10
|
+
> `tests/test_claude_md_budget.py` enforces that with a byte cap — move a section out
|
|
11
|
+
> rather than raise it.
|
|
12
|
+
>
|
|
13
|
+
> Not here: operator runbooks ([`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md)) ·
|
|
14
|
+
> settled design rationale
|
|
15
|
+
> ([`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale)) ·
|
|
16
|
+
> the `coord` command reference (`coord <cmd> --help`) · operator cost rules and
|
|
17
|
+
> "dispatch, don't do" ([`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md)) ·
|
|
18
|
+
> the current north-star objective ([`GOAL.md`](GOAL.md) — read it in a coordinator
|
|
19
|
+
> session when planning or triaging; a worker or reviewer leg does not need it).
|
|
19
20
|
|
|
20
21
|
## Codebase navigation — query the graph first
|
|
21
22
|
|
|
@@ -64,22 +65,11 @@ Query the **graphify graph** (`graphify-out/`) for the full module map + relatio
|
|
|
64
65
|
|
|
65
66
|
## Commands
|
|
66
67
|
|
|
67
|
-
`coord <cmd> --help` documents every command
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
coord
|
|
71
|
-
|
|
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`.
|
|
68
|
+
`coord <cmd> --help` documents every command and flag — that is the reference, not this
|
|
69
|
+
file. The operator-facing core loop (`plan`/`approve`/`assign`/`status`/`merge`/...) is in
|
|
70
|
+
[`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md#the-core-loop). The one `coord` command
|
|
71
|
+
a **worker** runs is `coord acceptance run --issue N`, in an oracle-loop round (see Testing
|
|
72
|
+
below).
|
|
83
73
|
|
|
84
74
|
## Development
|
|
85
75
|
|
|
@@ -133,34 +123,22 @@ computes the routing without actually building or testing anything.
|
|
|
133
123
|
|
|
134
124
|
## Key Design Decisions
|
|
135
125
|
|
|
136
|
-
|
|
137
|
-
[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
|
|
138
|
-
|
|
139
|
-
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
- **
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the
|
|
148
|
-
-
|
|
149
|
-
- **
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
- **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.
|
|
153
|
-
|
|
154
|
-
## Review Prompt Assembly
|
|
155
|
-
|
|
156
|
-
The reviewer gets a prompt built from:
|
|
157
|
-
1. **Repo's CLAUDE.md** — the project rules (source of truth, not duplicated)
|
|
158
|
-
2. **Generic checklist** — "did you add tests?", "did you stay in file scope?", "any security issues?"
|
|
159
|
-
3. **Repo overrides** — project-specific patterns from `coordinator.yml` `reviews.repo_overrides`
|
|
160
|
-
4. **The diff** — `gh pr diff` of the worker's branch vs base
|
|
161
|
-
5. **The issue** — title and body for intent verification
|
|
162
|
-
|
|
163
|
-
The reviewer reads the rules and enforces them against the diff. It does not have the worker's session context — genuinely independent.
|
|
126
|
+
These are the ones a **diff** can violate. The full set, with the reasoning behind each, is
|
|
127
|
+
in [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
|
|
128
|
+
|
|
129
|
+
- **`coordinator.yml` is the single source of truth** for repo topology, machine
|
|
130
|
+
capabilities, dependencies, concurrency limits, review settings, smoke-test rules and the
|
|
131
|
+
pipeline gate order (`pipeline.default_gates`). It lives in `~/.coord/`, **not** the repo
|
|
132
|
+
checkout.
|
|
133
|
+
- **Conflict rules are inferred, not configured.** There is no `file_groups` /
|
|
134
|
+
`exclusive_files` config and never will be — `coord drive-queue add` compares an issue's
|
|
135
|
+
own `## Files` declaration against the **real diffs** of in-flight branches
|
|
136
|
+
(`coord/overlap_predict.py`, #2247). **It ORDERS, never refuses.** Do not add such config.
|
|
137
|
+
- **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the
|
|
138
|
+
headless auto-loop holds review dispatch until there is a `passed`/`skipped` verdict.
|
|
139
|
+
- **Adversarial reviews are rule-enforcing, not rubber-stamping.** A fresh `claude -p`
|
|
140
|
+
session on a *different* machine reviews your diff against this file, with **zero shared
|
|
141
|
+
context with you** — so your diff and final message must stand on their own.
|
|
164
142
|
|
|
165
143
|
## Rules for workers
|
|
166
144
|
|
|
@@ -212,7 +190,5 @@ versus keep in the coordinator session, and the coordinator session's own
|
|
|
212
190
|
|
|
213
191
|
## Operating the fleet — operator-facing
|
|
214
192
|
|
|
215
|
-
**Not needed to work on this repo.**
|
|
216
|
-
runbook — the pre-flight gotchas, agent installs and releases, the drive queue, the customer
|
|
217
|
-
portal, and the two deploy facts that bite most often — is indexed in
|
|
193
|
+
**Not needed to work on this repo.** Every operator runbook is indexed in
|
|
218
194
|
[`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md).
|
|
@@ -5062,6 +5062,136 @@ def _claude_md_system_prompt_suffix(repo_path: str) -> str:
|
|
|
5062
5062
|
return "\n\n## Project rules (from CLAUDE.md)\n\n" + claude_md.strip() + "\n"
|
|
5063
5063
|
|
|
5064
5064
|
|
|
5065
|
+
# #3420: every `claude -p` leg loads the full JSON schema for all built-in
|
|
5066
|
+
# tools regardless of `--allowedTools`, which is a *permission* filter, not a
|
|
5067
|
+
# tool-surface one — a leg with `Read,Bash` in `--allowedTools` still pays
|
|
5068
|
+
# the prompt-token cost of the `Workflow`/`Skill`/etc. schemas it can never
|
|
5069
|
+
# call. Measured with controlled `claude -p` probes on this repo's own
|
|
5070
|
+
# `default_worker_command` flags (Claude Code 2.1.278, `type="work"`): the
|
|
5071
|
+
# schemas for these tools cost 12,134 tokens/turn (44% of the static
|
|
5072
|
+
# prefix), re-read at cache-read rates on every turn of every leg. None of
|
|
5073
|
+
# them has a legitimate use from a headless coord leg:
|
|
5074
|
+
# - `Workflow`: requires explicit user opt-in; a headless leg has no user.
|
|
5075
|
+
# - `Skill`: all `coord` skills are operator-only runbooks.
|
|
5076
|
+
# - `ScheduleWakeup`: every leg is one-shot (WORKER_SYSTEM_PROMPT's
|
|
5077
|
+
# ONE-SHOT section, #1394) — there is no future turn to wake up into.
|
|
5078
|
+
# - `Task`: CLAUDE.md mandates `graphify query` + grep for navigation
|
|
5079
|
+
# instead of spawning a subagent.
|
|
5080
|
+
# - `ReportFindings`, `ListAgents`: unreferenced by any coord system
|
|
5081
|
+
# prompt; no fleet-messaging or review-findings-reporting surface is
|
|
5082
|
+
# exposed to a leg.
|
|
5083
|
+
# - The remainder (`Cron*`, `DesignSync`, `EnterWorktree`/`ExitWorktree`,
|
|
5084
|
+
# `NotebookEdit`, `PushNotification`, `RemoteTrigger`, `SendMessage`):
|
|
5085
|
+
# operator/coordinator-session tools with no worker-leg counterpart —
|
|
5086
|
+
# already deferred behind `ToolSearch` so each costs only ~6-9 tokens,
|
|
5087
|
+
# but included for a consistent, minimal tool surface.
|
|
5088
|
+
#
|
|
5089
|
+
# Deliberately EXCLUDED, despite being equally unusable:
|
|
5090
|
+
# - `Monitor`: 0 marginal token cost, and WORKER_SYSTEM_PROMPT's ONE-SHOT
|
|
5091
|
+
# polling guidance depends on it (it's the sanctioned way to await a
|
|
5092
|
+
# backgrounded command in bounded steps).
|
|
5093
|
+
# - `ToolSearch`: cheap on its own, and removing it is untested — it's the
|
|
5094
|
+
# mechanism that resolves every deferred tool name at all.
|
|
5095
|
+
# - `TaskOutput`/`TaskStop`: look like `Task`'s output/cancel pair at
|
|
5096
|
+
# first glance, but WORKER_SYSTEM_PROMPT's ONE-SHOT section and
|
|
5097
|
+
# coord/smoke.py's SMOKE_SYSTEM_PROMPT both explicitly teach
|
|
5098
|
+
# `TaskOutput` as the bounded-poll alternative to `Monitor` for a
|
|
5099
|
+
# backgrounded Bash command (`run_in_background`) — disallowing it
|
|
5100
|
+
# would make that documented guidance a dead end. `TaskStop` is kept
|
|
5101
|
+
# alongside it since it's the same background-job-management pair.
|
|
5102
|
+
# - `WebFetch`/`WebSearch`: ~6 tokens each either way (negligible), and a
|
|
5103
|
+
# worker may legitimately need to look up library docs or an error
|
|
5104
|
+
# message mid-task — kept allowed rather than trading real capability
|
|
5105
|
+
# for a rounding error in prompt size.
|
|
5106
|
+
UNUSABLE_TOOL_SCHEMAS: list[str] = [
|
|
5107
|
+
"Workflow",
|
|
5108
|
+
"Skill",
|
|
5109
|
+
"ScheduleWakeup",
|
|
5110
|
+
"Task",
|
|
5111
|
+
"ReportFindings",
|
|
5112
|
+
"ListAgents",
|
|
5113
|
+
"CronCreate",
|
|
5114
|
+
"CronDelete",
|
|
5115
|
+
"CronList",
|
|
5116
|
+
"DesignSync",
|
|
5117
|
+
"EnterWorktree",
|
|
5118
|
+
"ExitWorktree",
|
|
5119
|
+
"NotebookEdit",
|
|
5120
|
+
"PushNotification",
|
|
5121
|
+
"RemoteTrigger",
|
|
5122
|
+
"SendMessage",
|
|
5123
|
+
]
|
|
5124
|
+
|
|
5125
|
+
|
|
5126
|
+
def worker_disallowed_tools(spec: AssignmentSpec, allowed_tools: str) -> list[str]:
|
|
5127
|
+
"""Return the ordered ``--disallowedTools`` entries for *spec*.
|
|
5128
|
+
|
|
5129
|
+
**Single source of truth.** Both argv builders that emit
|
|
5130
|
+
``--disallowedTools`` — :func:`default_worker_command` and
|
|
5131
|
+
:meth:`coord.providers.claude.ClaudeProvider.build_command` — call
|
|
5132
|
+
this, rather than each reimplementing the same four-layer stack. The
|
|
5133
|
+
two previously transcribed the logic independently, which is exactly
|
|
5134
|
+
how #3420's ``UNUSABLE_TOOL_SCHEMAS`` layer landed in one and not the
|
|
5135
|
+
other; the parity suite in ``tests/test_providers.py`` caught it, but
|
|
5136
|
+
a shared function makes the divergence unrepresentable instead of
|
|
5137
|
+
merely detectable.
|
|
5138
|
+
|
|
5139
|
+
Layers, in argv order (each skips entries an earlier layer already
|
|
5140
|
+
added, so the result is de-duplicated but order-stable):
|
|
5141
|
+
|
|
5142
|
+
1. #3420 ``UNUSABLE_TOOL_SCHEMAS`` — unconditional, every spec type.
|
|
5143
|
+
2. #1315 sealed-oracle write guard, from ``spec.files_forbidden``.
|
|
5144
|
+
3. #1642 base-checkout write guard — only when *allowed_tools*
|
|
5145
|
+
actually grants ``Edit``; for the Read/Bash-only chat types the
|
|
5146
|
+
guard would be a no-op cluttering the argv.
|
|
5147
|
+
4. #2461 ``REVIEW_DENY_COMMANDS`` — only for ``spec.type ==
|
|
5148
|
+
"review"``, wiring the mutating-command deny list into the
|
|
5149
|
+
CLI-enforced flag and not just the soft prompt reminder.
|
|
5150
|
+
|
|
5151
|
+
Args:
|
|
5152
|
+
spec: The assignment being dispatched.
|
|
5153
|
+
allowed_tools: The ``--allowedTools`` value computed for this
|
|
5154
|
+
spec — inspected for ``Edit`` to decide layer 3. Passing the
|
|
5155
|
+
caller's own computed value (rather than re-deriving it here)
|
|
5156
|
+
keeps the two flags consistent even when a caller overrides
|
|
5157
|
+
``--allowedTools`` explicitly, as ``build_command`` allows.
|
|
5158
|
+
|
|
5159
|
+
Returns:
|
|
5160
|
+
A fresh list; callers may mutate it. Empty only in the
|
|
5161
|
+
impossible case where every layer contributes nothing — since
|
|
5162
|
+
#3420, layer 1 is unconditional, so in practice this is always
|
|
5163
|
+
non-empty and ``--disallowedTools`` is always emitted.
|
|
5164
|
+
"""
|
|
5165
|
+
# #3420: strip the unusable-tool schemas from every spec type, including
|
|
5166
|
+
# the Read/Bash-only chat legs (plan, refinement, test-chat,
|
|
5167
|
+
# new-issue-chat, smoke, review) — they carry the same
|
|
5168
|
+
# Workflow/Skill/Task/etc. schemas as a work leg and benefit identically.
|
|
5169
|
+
# This is FIRST so the guards below, which each append to this same
|
|
5170
|
+
# list, keep working unchanged.
|
|
5171
|
+
disallowed_tools = list(UNUSABLE_TOOL_SCHEMAS)
|
|
5172
|
+
# #1315: structural sealing enforcement — see _sealed_write_guard_tools.
|
|
5173
|
+
for pattern in _sealed_write_guard_tools(spec.files_forbidden):
|
|
5174
|
+
if pattern not in disallowed_tools:
|
|
5175
|
+
disallowed_tools.append(pattern)
|
|
5176
|
+
# #1642: block Edit/Write on the shared base checkout for any spec.type
|
|
5177
|
+
# that actually gets Edit/Write in --allowedTools — the Read/Bash-only
|
|
5178
|
+
# chat types can't touch files regardless, and adding the guard there
|
|
5179
|
+
# would be a no-op cluttering their argv for nothing.
|
|
5180
|
+
if "Edit" in allowed_tools:
|
|
5181
|
+
for pattern in _base_checkout_write_guard_tools(spec.repo_path):
|
|
5182
|
+
if pattern not in disallowed_tools:
|
|
5183
|
+
disallowed_tools.append(pattern)
|
|
5184
|
+
# #2461: review gets its mutating-command deny list wired into
|
|
5185
|
+
# --disallowedTools too, not just the soft system-prompt reminder from
|
|
5186
|
+
# build_deny_prompt — the CLI enforces this one even if the model
|
|
5187
|
+
# decides to ignore its own prompt.
|
|
5188
|
+
if spec.type == "review":
|
|
5189
|
+
for pattern in REVIEW_DENY_COMMANDS:
|
|
5190
|
+
if pattern not in disallowed_tools:
|
|
5191
|
+
disallowed_tools.append(pattern)
|
|
5192
|
+
return disallowed_tools
|
|
5193
|
+
|
|
5194
|
+
|
|
5065
5195
|
def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER_BINARY) -> list[str]:
|
|
5066
5196
|
"""Build the argv for invoking the worker on this assignment.
|
|
5067
5197
|
|
|
@@ -5347,24 +5477,10 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
5347
5477
|
]
|
|
5348
5478
|
if spec.model:
|
|
5349
5479
|
argv.extend(["--model", spec.model])
|
|
5350
|
-
# #1315:
|
|
5351
|
-
|
|
5352
|
-
#
|
|
5353
|
-
|
|
5354
|
-
# chat types above can't touch files regardless, and adding the guard
|
|
5355
|
-
# there would be a no-op cluttering their argv for nothing.
|
|
5356
|
-
if "Edit" in allowed_tools:
|
|
5357
|
-
for pattern in _base_checkout_write_guard_tools(spec.repo_path):
|
|
5358
|
-
if pattern not in disallowed_tools:
|
|
5359
|
-
disallowed_tools.append(pattern)
|
|
5360
|
-
# #2461: review gets its mutating-command deny list wired into
|
|
5361
|
-
# --disallowedTools too, not just the soft system-prompt reminder from
|
|
5362
|
-
# build_deny_prompt above — the CLI enforces this one even if the model
|
|
5363
|
-
# decides to ignore its own prompt.
|
|
5364
|
-
if spec.type == "review":
|
|
5365
|
-
for pattern in REVIEW_DENY_COMMANDS:
|
|
5366
|
-
if pattern not in disallowed_tools:
|
|
5367
|
-
disallowed_tools.append(pattern)
|
|
5480
|
+
# #3420 / #1315 / #1642 / #2461: all four --disallowedTools layers live
|
|
5481
|
+
# in worker_disallowed_tools, shared with ClaudeProvider.build_command so
|
|
5482
|
+
# the two argv builders cannot drift apart (see that function's docstring).
|
|
5483
|
+
disallowed_tools = worker_disallowed_tools(spec, allowed_tools)
|
|
5368
5484
|
if disallowed_tools:
|
|
5369
5485
|
argv.extend(["--disallowedTools", ",".join(disallowed_tools)])
|
|
5370
5486
|
# #315: when resuming a prior chat session, load the prior conversation so
|
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
Parity requirement: ``ClaudeProvider().build_command(spec)`` produces the
|
|
4
4
|
**same argv** as ``coord.agent.default_worker_command(spec)`` for the same
|
|
5
|
-
inputs. The
|
|
6
|
-
|
|
7
|
-
``
|
|
8
|
-
``tests/test_providers.py`` enforce this
|
|
5
|
+
inputs. The ``spec.type`` → prompt/allowed-tools branches are a direct
|
|
6
|
+
transcription of that function's body with the ``resolved_model`` /
|
|
7
|
+
``system_prompt`` / ``allowed_tools`` / ``permission_mode`` kwargs spliced
|
|
8
|
+
in; the parity tests in ``tests/test_providers.py`` enforce this
|
|
9
|
+
mechanically. The ``--disallowedTools`` stack is **not** transcribed —
|
|
10
|
+
both builders call the shared ``coord.agent.worker_disallowed_tools``, so
|
|
11
|
+
a new deny layer lands in both without a sync step (#3420).
|
|
9
12
|
|
|
10
13
|
Imports from ``coord.agent`` are **deferred** (inside method bodies) to keep
|
|
11
14
|
the import cycle latent until the wiring issue lands. At that point
|
|
@@ -119,10 +122,9 @@ class ClaudeProvider(Provider):
|
|
|
119
122
|
TEST_CHAT_SYSTEM_PROMPT,
|
|
120
123
|
WORKER_PLAN_PROMPT,
|
|
121
124
|
WORKER_SYSTEM_PROMPT,
|
|
122
|
-
_base_checkout_write_guard_tools,
|
|
123
125
|
_claude_md_system_prompt_suffix,
|
|
124
|
-
_sealed_write_guard_tools,
|
|
125
126
|
build_deny_prompt,
|
|
127
|
+
worker_disallowed_tools,
|
|
126
128
|
)
|
|
127
129
|
from coord.review import REVIEWER_SYSTEM_PROMPT # noqa: PLC0415
|
|
128
130
|
from coord.smoke import SMOKE_SYSTEM_PROMPT # noqa: PLC0415
|
|
@@ -285,20 +287,16 @@ class ClaudeProvider(Provider):
|
|
|
285
287
|
]
|
|
286
288
|
if effective_model:
|
|
287
289
|
argv.extend(["--model", effective_model])
|
|
288
|
-
# #1315 / #1642
|
|
289
|
-
# default_worker_command
|
|
290
|
-
#
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
#
|
|
297
|
-
|
|
298
|
-
if spec.type == "review":
|
|
299
|
-
for pattern in REVIEW_DENY_COMMANDS:
|
|
300
|
-
if pattern not in disallowed_tools:
|
|
301
|
-
disallowed_tools.append(pattern)
|
|
290
|
+
# #3420 / #1315 / #1642 / #2461: NOT transcribed from
|
|
291
|
+
# default_worker_command like the branches above — both builders call
|
|
292
|
+
# the one shared `worker_disallowed_tools`, so a new deny layer lands
|
|
293
|
+
# in both by construction. It previously WAS transcribed here, and
|
|
294
|
+
# #3420's unusable-tool-schema layer went into default_worker_command
|
|
295
|
+
# only; the parity suite caught the drift, but the shared call means
|
|
296
|
+
# there is nothing left to keep in sync. Pass this method's own
|
|
297
|
+
# `allowed_tools` (possibly a caller override) so the two flags stay
|
|
298
|
+
# consistent.
|
|
299
|
+
disallowed_tools = worker_disallowed_tools(spec, allowed_tools)
|
|
302
300
|
if disallowed_tools:
|
|
303
301
|
argv.extend(["--disallowedTools", ",".join(disallowed_tools)])
|
|
304
302
|
if spec.resume_session_id:
|
|
@@ -250,6 +250,21 @@ which is why it lives here rather than in the file every worker leg loads. The o
|
|
|
250
250
|
statements of these rules remain in `CLAUDE.md`'s "Key Design Decisions"; the reasoning is
|
|
251
251
|
here.
|
|
252
252
|
|
|
253
|
+
### How the review prompt is assembled
|
|
254
|
+
|
|
255
|
+
The reviewer gets a prompt built from:
|
|
256
|
+
1. **Repo's CLAUDE.md** — the project rules (source of truth, not duplicated)
|
|
257
|
+
2. **Generic checklist** — "did you add tests?", "did you stay in file scope?", "any security issues?"
|
|
258
|
+
3. **Repo overrides** — project-specific patterns from `coordinator.yml` `reviews.repo_overrides`
|
|
259
|
+
4. **The diff** — `gh pr diff` of the worker's branch vs base
|
|
260
|
+
5. **The issue** — title and body for intent verification
|
|
261
|
+
|
|
262
|
+
The reviewer reads the rules and enforces them against the diff. It does not have the worker's session context — genuinely independent.
|
|
263
|
+
|
|
264
|
+
Moved here from [`CLAUDE.md`](../CLAUDE.md) (#3422). The reviewer does not need a description
|
|
265
|
+
of how its own prompt was built, and neither does a worker — this is for someone editing
|
|
266
|
+
`coord/review.py`.
|
|
267
|
+
|
|
253
268
|
### Agent servers are dumb dispatchers
|
|
254
269
|
|
|
255
270
|
They spawn `claude -p` and track the subprocess. All intelligence is in the coordinator
|
|
@@ -19,6 +19,29 @@ in `docs/`.*
|
|
|
19
19
|
still manual. Epic #3117.
|
|
20
20
|
- [`DRIVE_QUEUE.md`](DRIVE_QUEUE.md) — the durable, board-backed driver (`coord drive-queue`, #1750). **Read the top section before queuing more than ~2 issues on one repo.**
|
|
21
21
|
|
|
22
|
+
## The core loop
|
|
23
|
+
|
|
24
|
+
Moved here from [`CLAUDE.md`](../CLAUDE.md) (#3422): a worker cannot run any of these —
|
|
25
|
+
the coordinator owns dispatch and GitHub — so it was pure operator surface being re-read
|
|
26
|
+
on every turn of every leg. `coord <cmd> --help` remains the authoritative reference.
|
|
27
|
+
|
|
28
|
+
`coord <cmd> --help` documents every command + flags. The core loop:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
coord plan # Brain proposes assignments for idle machines
|
|
32
|
+
coord approve 1,3 # Dispatch approved proposals (comma-separated IDs)
|
|
33
|
+
coord assign <machine> <repo> <issue> [--briefing TEXT | --briefing-file F] [--dry-run] # Direct dispatch
|
|
34
|
+
coord status [--freshness] # Machines, assignments, connectivity (+ repo freshness vs GitHub HEADs)
|
|
35
|
+
coord log <id> [-f] [--machine NAME] # claude -p output (remote logs need --machine)
|
|
36
|
+
coord notify # Poll agents, post completion/failure comments to GitHub
|
|
37
|
+
coord test --passed|--fail|--skipped <id> # Record the Test-gate verdict (bare `coord test <id>` builds+tests locally)
|
|
38
|
+
coord merge [--dry-run] [--repo NAME] [--method rebase|squash|merge] [--order IDs] [--force-merge]
|
|
39
|
+
coord reconcile-merges # Backfill missing branches + record out-of-band merges (#609/#611)
|
|
40
|
+
coord retry|stop|resume <id> # Recovery; `coord done` ends the session
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
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`.
|
|
44
|
+
|
|
22
45
|
## Reference
|
|
23
46
|
|
|
24
47
|
- [`ARCHITECTURE.md`](ARCHITECTURE.md) — how it all fits together, plus the settled design rationale. Two diagnostic entry points: [why a merge/review isn't happening](ARCHITECTURE.md#when-a-merge-isnt-happening) (**check here first when "Go does nothing"**) and [why an issue is in the Pipeline you never dispatched](ARCHITECTURE.md#when-an-issue-is-sitting-in-the-pipeline-you-never-dispatched).
|
|
@@ -26,6 +26,7 @@ from coord.agent import (
|
|
|
26
26
|
REVIEW_DENY_COMMANDS,
|
|
27
27
|
RUNNING,
|
|
28
28
|
RUNTIME_CEILING_EXIT,
|
|
29
|
+
UNUSABLE_TOOL_SCHEMAS,
|
|
29
30
|
MOCK_AUTHOR_SYSTEM_PROMPT,
|
|
30
31
|
WORKER_SYSTEM_PROMPT,
|
|
31
32
|
AgentAssignment,
|
|
@@ -1862,8 +1863,10 @@ def test_default_worker_command_blocks_base_checkout_writes() -> None:
|
|
|
1862
1863
|
disallowed = argv[idx + 1]
|
|
1863
1864
|
assert "Edit(//tmp/repo/**)" in disallowed
|
|
1864
1865
|
assert "Write(//tmp/repo/**)" in disallowed
|
|
1865
|
-
# Read-only spec types (no Edit in --allowedTools) get no
|
|
1866
|
-
# they can't write anywhere so
|
|
1866
|
+
# Read-only spec types (no Edit in --allowedTools) get no base-checkout
|
|
1867
|
+
# guard entries — they can't write anywhere so those patterns would be a
|
|
1868
|
+
# no-op. --disallowedTools itself is still present, though (#3420: the
|
|
1869
|
+
# unusable-tool-schema list applies unconditionally to every spec type).
|
|
1867
1870
|
plan_spec = AssignmentSpec(
|
|
1868
1871
|
repo_name="api",
|
|
1869
1872
|
repo_path="/tmp/repo",
|
|
@@ -1872,7 +1875,11 @@ def test_default_worker_command_blocks_base_checkout_writes() -> None:
|
|
|
1872
1875
|
briefing="b",
|
|
1873
1876
|
type="plan",
|
|
1874
1877
|
)
|
|
1875
|
-
|
|
1878
|
+
plan_argv = default_worker_command(plan_spec)
|
|
1879
|
+
assert "--disallowedTools" in plan_argv
|
|
1880
|
+
plan_disallowed = plan_argv[plan_argv.index("--disallowedTools") + 1]
|
|
1881
|
+
assert "Edit(" not in plan_disallowed
|
|
1882
|
+
assert "Write(" not in plan_disallowed
|
|
1876
1883
|
|
|
1877
1884
|
|
|
1878
1885
|
def test_default_worker_command_blocks_sealed_oracle_writes() -> None:
|
|
@@ -1927,6 +1934,119 @@ def test_default_worker_command_mock_author_not_sealed() -> None:
|
|
|
1927
1934
|
assert "Write(//tmp/repo/**)" in disallowed
|
|
1928
1935
|
|
|
1929
1936
|
|
|
1937
|
+
# ── #3420: strip unusable tool schemas from every leg ────────────────────────
|
|
1938
|
+
|
|
1939
|
+
|
|
1940
|
+
@pytest.mark.parametrize(
|
|
1941
|
+
"spec_type",
|
|
1942
|
+
[
|
|
1943
|
+
"plan",
|
|
1944
|
+
"refinement",
|
|
1945
|
+
"test-chat",
|
|
1946
|
+
"new-issue-chat",
|
|
1947
|
+
"milestone-chat",
|
|
1948
|
+
"decomposition-chat",
|
|
1949
|
+
"mock-author",
|
|
1950
|
+
"smoke",
|
|
1951
|
+
"review",
|
|
1952
|
+
"work",
|
|
1953
|
+
],
|
|
1954
|
+
)
|
|
1955
|
+
def test_default_worker_command_disallows_unusable_tool_schemas_for_every_spec_type(
|
|
1956
|
+
spec_type: str,
|
|
1957
|
+
) -> None:
|
|
1958
|
+
"""Every tool schema Claude Code still loads even though a worker/chat
|
|
1959
|
+
leg can never legitimately call it (Workflow needs a user, Skill is
|
|
1960
|
+
operator-only, etc. — see UNUSABLE_TOOL_SCHEMAS' docstring comment) must
|
|
1961
|
+
land in --disallowedTools for EVERY spec type, not just work legs — the
|
|
1962
|
+
Read/Bash-only chat types pay the exact same schema cost and benefit
|
|
1963
|
+
identically (#3420)."""
|
|
1964
|
+
spec = AssignmentSpec(
|
|
1965
|
+
repo_name="api",
|
|
1966
|
+
repo_path="/tmp/repo",
|
|
1967
|
+
issue_number=1,
|
|
1968
|
+
issue_title="t",
|
|
1969
|
+
briefing="b",
|
|
1970
|
+
type=spec_type,
|
|
1971
|
+
)
|
|
1972
|
+
argv = default_worker_command(spec)
|
|
1973
|
+
assert "--disallowedTools" in argv
|
|
1974
|
+
disallowed = argv[argv.index("--disallowedTools") + 1].split(",")
|
|
1975
|
+
for tool in UNUSABLE_TOOL_SCHEMAS:
|
|
1976
|
+
assert tool in disallowed, f"{tool} missing from --disallowedTools for type={spec_type}"
|
|
1977
|
+
|
|
1978
|
+
|
|
1979
|
+
def test_unusable_tool_schemas_keeps_the_one_shot_polling_tools() -> None:
|
|
1980
|
+
"""Monitor and TaskOutput/TaskStop must NOT be disallowed: both
|
|
1981
|
+
WORKER_SYSTEM_PROMPT's ONE-SHOT section and coord.smoke.SMOKE_SYSTEM_PROMPT
|
|
1982
|
+
explicitly teach `Monitor` / `TaskOutput` as the sanctioned bounded-poll
|
|
1983
|
+
pattern for a backgrounded Bash command. Disallowing either would turn
|
|
1984
|
+
documented guidance into a dead end. ToolSearch (resolves every deferred
|
|
1985
|
+
tool name) and WebFetch/WebSearch (kept for real capability — see the
|
|
1986
|
+
comment above UNUSABLE_TOOL_SCHEMAS) must not be disallowed either."""
|
|
1987
|
+
for tool in ("Monitor", "ToolSearch", "TaskOutput", "TaskStop", "WebFetch", "WebSearch"):
|
|
1988
|
+
assert tool not in UNUSABLE_TOOL_SCHEMAS
|
|
1989
|
+
|
|
1990
|
+
|
|
1991
|
+
def test_default_worker_command_unusable_tool_schemas_coexist_with_sealed_write_guard() -> None:
|
|
1992
|
+
"""Regression for #3420: disallowed_tools must be BUILT UP (append), not
|
|
1993
|
+
overwritten, by the new unusable-tool-schema seed — a bare `disallowed_tools
|
|
1994
|
+
= list(UNUSABLE_TOOL_SCHEMAS)` placed after the #1315 sealed-write guard
|
|
1995
|
+
populated it would silently discard that guard. Confirms both the new
|
|
1996
|
+
entries and the existing sealed-oracle guard appear together in the same
|
|
1997
|
+
--disallowedTools value for a sealed work spec."""
|
|
1998
|
+
spec = AssignmentSpec(
|
|
1999
|
+
repo_name="api",
|
|
2000
|
+
repo_path="/tmp/repo",
|
|
2001
|
+
issue_number=1120,
|
|
2002
|
+
issue_title="t",
|
|
2003
|
+
briefing="please fix tests/acceptance/ms-38/contract.md",
|
|
2004
|
+
files_forbidden=["tests/acceptance/"],
|
|
2005
|
+
)
|
|
2006
|
+
argv = default_worker_command(spec)
|
|
2007
|
+
disallowed = argv[argv.index("--disallowedTools") + 1]
|
|
2008
|
+
assert "Edit(tests/acceptance/**)" in disallowed
|
|
2009
|
+
assert "Write(tests/acceptance/**)" in disallowed
|
|
2010
|
+
for tool in UNUSABLE_TOOL_SCHEMAS:
|
|
2011
|
+
assert tool in disallowed.split(",")
|
|
2012
|
+
|
|
2013
|
+
|
|
2014
|
+
@pytest.mark.posix_only
|
|
2015
|
+
@_posix_repo_path_skip
|
|
2016
|
+
def test_default_worker_command_unusable_tool_schemas_coexist_with_base_checkout_guard() -> None:
|
|
2017
|
+
"""Regression for #3420: confirms the #1642 base-checkout guard (which
|
|
2018
|
+
appends to disallowed_tools AFTER the new seed) still lands alongside the
|
|
2019
|
+
unusable-tool-schema entries for an Edit-capable spec — the seed must not
|
|
2020
|
+
have clobbered what the base-checkout guard adds next."""
|
|
2021
|
+
spec = AssignmentSpec(
|
|
2022
|
+
repo_name="api",
|
|
2023
|
+
repo_path="/tmp/repo",
|
|
2024
|
+
issue_number=1,
|
|
2025
|
+
issue_title="t",
|
|
2026
|
+
briefing="b",
|
|
2027
|
+
files_forbidden=[],
|
|
2028
|
+
)
|
|
2029
|
+
argv = default_worker_command(spec)
|
|
2030
|
+
disallowed = argv[argv.index("--disallowedTools") + 1]
|
|
2031
|
+
assert "Edit(//tmp/repo/**)" in disallowed
|
|
2032
|
+
assert "Write(//tmp/repo/**)" in disallowed
|
|
2033
|
+
for tool in UNUSABLE_TOOL_SCHEMAS:
|
|
2034
|
+
assert tool in disallowed.split(",")
|
|
2035
|
+
|
|
2036
|
+
|
|
2037
|
+
def test_default_worker_command_unusable_tool_schemas_coexist_with_review_deny_commands() -> None:
|
|
2038
|
+
"""Regression for #3420: confirms #2461's REVIEW_DENY_COMMANDS (appended
|
|
2039
|
+
to disallowed_tools last, for spec.type == "review") still lands
|
|
2040
|
+
alongside the unusable-tool-schema entries — a bare overwrite anywhere in
|
|
2041
|
+
the chain would silently disable the review mutating-command guard."""
|
|
2042
|
+
argv = default_worker_command(_review_spec())
|
|
2043
|
+
disallowed = argv[argv.index("--disallowedTools") + 1].split(",")
|
|
2044
|
+
for pattern in REVIEW_DENY_COMMANDS:
|
|
2045
|
+
assert pattern in disallowed
|
|
2046
|
+
for tool in UNUSABLE_TOOL_SCHEMAS:
|
|
2047
|
+
assert tool in disallowed
|
|
2048
|
+
|
|
2049
|
+
|
|
1930
2050
|
# ── #1445: worktree-writability preflight ───────────────────────────────────
|
|
1931
2051
|
|
|
1932
2052
|
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
CLAUDE.md is loaded into every worker leg, every review leg, and every
|
|
4
4
|
coordinator session -- and re-read on every turn of each, at cache-read
|
|
5
|
-
rates. It
|
|
5
|
+
rates. It had already been cut twice for size (#2195: 41,506 -> 24,219
|
|
6
6
|
bytes; #2787: ~29,732 -> 19,622 bytes) because nothing watched its size in
|
|
7
7
|
between, and it drifted back up at roughly 500 bytes/day both times.
|
|
8
|
+
#3422 cut it a third time (18,605 -> 15,001) by moving the `## Commands`
|
|
9
|
+
reference, the explanatory Key-Design bullets and the review-prompt-assembly
|
|
10
|
+
note out to docs/ -- the first cut made with this guard already in place, so
|
|
11
|
+
the cap came down with the file rather than leaving room to drift back into.
|
|
8
12
|
|
|
9
13
|
This test is that watch. It is deliberately dumb: a byte count, nothing
|
|
10
14
|
more -- no parsing, no section analysis, no escape hatch. See #2817 for the
|
|
@@ -15,14 +19,14 @@ from __future__ import annotations
|
|
|
15
19
|
|
|
16
20
|
from pathlib import Path
|
|
17
21
|
|
|
18
|
-
# ~
|
|
19
|
-
# the #
|
|
22
|
+
# ~6% headroom over the 15,001-byte size CLAUDE.md was at immediately after
|
|
23
|
+
# the #3422 operator-split. Raising this constant is a deliberate, reviewable act
|
|
20
24
|
# -- not something to do reflexively to make this test pass. If CLAUDE.md
|
|
21
25
|
# has grown past the cap, the fix is almost always to MOVE a section to
|
|
22
26
|
# docs/ (leaving a one-line pointer behind), not to raise this number. Per
|
|
23
27
|
# the file's own scope note: "if a new rule does not change what a worker
|
|
24
28
|
# does, it belongs in docs/."
|
|
25
|
-
CLAUDE_MD_MAX_BYTES =
|
|
29
|
+
CLAUDE_MD_MAX_BYTES = 15872 # 15.5 KiB
|
|
26
30
|
|
|
27
31
|
CLAUDE_MD_PATH = Path(__file__).resolve().parent.parent / "CLAUDE.md"
|
|
28
32
|
|
|
@@ -37,7 +41,7 @@ def test_claude_md_stays_within_byte_budget() -> None:
|
|
|
37
41
|
"Its size is a direct, per-turn, fleet-wide cost, not a one-time "
|
|
38
42
|
"reading-time cost.\n\n"
|
|
39
43
|
"This file has already been cut twice for exactly this reason "
|
|
40
|
-
"(#2195, #2787) and drifted back up
|
|
44
|
+
"(#2195, #2787, #3422) and drifted back up each time because nothing "
|
|
41
45
|
"enforced a cap -- that is what this test is for.\n\n"
|
|
42
46
|
"The fix is almost always to MOVE a section out to docs/ (leaving "
|
|
43
47
|
"a short pointer line in CLAUDE.md), per the file's own scope "
|