code-coordinator 0.5.328__tar.gz → 0.5.330__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.328 → code_coordinator-0.5.330}/PKG-INFO +1 -1
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agent.py +59 -1
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/drive_queue.py +38 -3
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/portal.py +10 -2
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/drive_queue.py +69 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_drive_queue.py +72 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_decomposition_chat.py +111 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue.py +82 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/.gitignore +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/CLAUDE.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/GOAL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/LICENSE +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/MANIFEST.in +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/README.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/__init__.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/audit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/block_log.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/board_service.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/brain.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/claim.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/cli.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/client.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/comments.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/config.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dao.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/db.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/deps.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/drive.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/events.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/filelock.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/freshness.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/gates.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/goal.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/context.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/models.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/render.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/health/units.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/hooks.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/interactive.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/models.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/network.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/notify.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/openapi.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/parentage.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/plans.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/progress.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/release_window.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/reports.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/review.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/self_health.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/smoke.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/split_work.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/sql.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/state.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/test_author.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/test_report.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/usage.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/install-agent.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/pyproject.toml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/setup.cfg +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/__init__.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/backends.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/conftest.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_db.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_events.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_init.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_models.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_network.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_session.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_split.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_state.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.328 → code_coordinator-0.5.330}/tests/write_parity.py +0 -0
|
@@ -4282,7 +4282,41 @@ exists. Any time the operator gives you a substantive fact about the \
|
|
|
4282
4282
|
client, the users, or the scope, say back what you would record and ask \
|
|
4283
4283
|
whether to record it. Keep the wording theirs, not your paraphrase — the \
|
|
4284
4284
|
ledger is verbatim by design, and the narrative (which is regenerable) is \
|
|
4285
|
-
where summarizing belongs
|
|
4285
|
+
where summarizing belongs.
|
|
4286
|
+
|
|
4287
|
+
**Confirming a decision on the operator's instruction (#2998).** The base \
|
|
4288
|
+
prompt above says never to run `coord portal decision confirm` — that rule \
|
|
4289
|
+
was written for a session with nobody to ask. You have someone to ask: the \
|
|
4290
|
+
operator sitting at this terminal, who is exactly who that command is \
|
|
4291
|
+
reserved for. What never changes, headless or attended, is that YOU may \
|
|
4292
|
+
never confirm your own proposal on your own initiative — inferring consent, \
|
|
4293
|
+
or treating agreement about something else as consent to confirm, is \
|
|
4294
|
+
exactly the self-approval the base rule exists to prevent.
|
|
4295
|
+
|
|
4296
|
+
But when the operator gives you an EXPLICIT, PRESENT-TURN instruction to \
|
|
4297
|
+
confirm a specific decision ("confirm decision 8", "yes, confirm that"), you \
|
|
4298
|
+
MAY act on it, in this order:
|
|
4299
|
+
|
|
4300
|
+
1. Quote the operator's instruction back, verbatim, so the transcript makes \
|
|
4301
|
+
unambiguous that this was ordered, not inferred.
|
|
4302
|
+
2. Record the attribution on the ledger BEFORE confirming, so a later \
|
|
4303
|
+
session (or a human reading the ledger) can see this was operator-\
|
|
4304
|
+
instructed rather than session-initiated:
|
|
4305
|
+
|
|
4306
|
+
coord portal note <submission_id> "Operator instructed: confirm decision #<seq> (\"<their exact words>\")"
|
|
4307
|
+
|
|
4308
|
+
3. Only then run:
|
|
4309
|
+
|
|
4310
|
+
coord portal decision confirm <submission_id> <seq>
|
|
4311
|
+
|
|
4312
|
+
Do not collapse this into one step, and do not run it on a vague or implied \
|
|
4313
|
+
go-ahead — if you are not sure which decision the operator means, ask for \
|
|
4314
|
+
the seq before running anything. This carve-out covers `decision confirm` \
|
|
4315
|
+
ONLY. Every other entry on the deny list stays forbidden in this session \
|
|
4316
|
+
exactly as it is headlessly (raw `gh` mutations, `git push`, `git commit`, \
|
|
4317
|
+
destructive git, `coord approve`, `coord merge`, `coord assign`) — an \
|
|
4318
|
+
operator being present changes who may authorize a RESERVED command, it \
|
|
4319
|
+
does not change whether a DANGEROUS one is safe.\
|
|
4286
4320
|
"""
|
|
4287
4321
|
|
|
4288
4322
|
# Deny list applied to decomposition-chat workers (#2533; extended #2750
|
|
@@ -4296,6 +4330,13 @@ where summarizing belongs.\
|
|
|
4296
4330
|
# confirm` (the OPERATOR's move, never this session's own — #2750's "Propose"
|
|
4297
4331
|
# terminal move must not self-confirm), while every write path this session
|
|
4298
4332
|
# actually needs is allowed by omission.
|
|
4333
|
+
#
|
|
4334
|
+
# This is the HEADLESS list — used verbatim by `default_worker_command`'s
|
|
4335
|
+
# `spec.type == "decomposition-chat"` branch below, where the session
|
|
4336
|
+
# genuinely has nobody to ask, so `decision confirm` stays hard-denied. The
|
|
4337
|
+
# `--interactive` posture has an operator in the room; see
|
|
4338
|
+
# DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS below (#2998) for its own,
|
|
4339
|
+
# narrower carve-out of exactly this one entry.
|
|
4299
4340
|
DECOMPOSITION_CHAT_DENY_COMMANDS: list[str] = [
|
|
4300
4341
|
"Bash(gh issue edit *)",
|
|
4301
4342
|
"Bash(gh issue create *)",
|
|
@@ -4324,6 +4365,23 @@ DECOMPOSITION_CHAT_DENY_COMMANDS: list[str] = [
|
|
|
4324
4365
|
"Bash(coord portal decision confirm *)",
|
|
4325
4366
|
]
|
|
4326
4367
|
|
|
4368
|
+
# #2998: the ATTENDED counterpart to the list above — every entry the same
|
|
4369
|
+
# EXCEPT `coord portal decision confirm`. An attended session has an
|
|
4370
|
+
# operator sitting at the terminal, and `decision confirm` is RESERVED for
|
|
4371
|
+
# the operator (not DANGEROUS the way `git push`/`coord merge`/destructive
|
|
4372
|
+
# git are) — the question in that posture is who authorised it, not whether
|
|
4373
|
+
# it's safe. DECOMPOSITION_CHAT_ATTENDED_ADDENDUM spells out the condition
|
|
4374
|
+
# under which the session may actually run it (an explicit, present-turn
|
|
4375
|
+
# operator instruction, quoted back and attributed on the ledger via `coord
|
|
4376
|
+
# portal note` before confirming) — this list only stops blanket-denying it
|
|
4377
|
+
# so that addendum isn't fighting a FORBIDDEN COMMANDS entry telling the
|
|
4378
|
+
# session the opposite. Every genuinely dangerous entry stays denied,
|
|
4379
|
+
# unchanged, in both postures.
|
|
4380
|
+
DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS: list[str] = [
|
|
4381
|
+
cmd for cmd in DECOMPOSITION_CHAT_DENY_COMMANDS
|
|
4382
|
+
if cmd != "Bash(coord portal decision confirm *)"
|
|
4383
|
+
]
|
|
4384
|
+
|
|
4327
4385
|
MOCK_AUTHOR_SYSTEM_PROMPT = """\
|
|
4328
4386
|
You are an independent mock-author agent for Gate A of a milestone \
|
|
4329
4387
|
(#930, docs/ORACLE_LOOP.md) — the pre-work architecture gate. You have \
|
|
@@ -80,9 +80,12 @@ from coord.drive_queue import (
|
|
|
80
80
|
find_cycle,
|
|
81
81
|
fired_holds,
|
|
82
82
|
is_dispatch_failure_reason,
|
|
83
|
+
is_merge_gate_block_reason,
|
|
83
84
|
is_permanent_block_reason,
|
|
84
85
|
is_pre_dispatch_block_reason,
|
|
85
86
|
is_unsatisfiable_prereq_reason,
|
|
87
|
+
merge_gate_remedy_command,
|
|
88
|
+
merge_plan_inspect_command,
|
|
86
89
|
parse_after_spec,
|
|
87
90
|
parse_key,
|
|
88
91
|
pending_probe_targets,
|
|
@@ -4526,6 +4529,30 @@ def _requeue_command(entry: QueueEntry | None, key: str) -> str:
|
|
|
4526
4529
|
)
|
|
4527
4530
|
|
|
4528
4531
|
|
|
4532
|
+
def _blocked_escalation_command(entry: QueueEntry | None, key: str, reason: str) -> str:
|
|
4533
|
+
"""The command a `blocked`/`oscillating` escalation should propose
|
|
4534
|
+
(#3016) — `_requeue_command` ONLY for a genuinely never-dispatched entry;
|
|
4535
|
+
a gate-specific remedy (or the safe read-only inspect fallback) whenever
|
|
4536
|
+
*reason* already names a merge-gate block.
|
|
4537
|
+
|
|
4538
|
+
`_requeue_command` is right exactly once: nothing was ever dispatched
|
|
4539
|
+
for this row (or every dispatch attempt died before an assignment
|
|
4540
|
+
existed), so there is nothing left to lose by dropping and re-adding it.
|
|
4541
|
+
But `is_merge_gate_block_reason` names the other shape — Work/Test/
|
|
4542
|
+
Review already completed and it is the MERGE stage that is stuck — where
|
|
4543
|
+
the same requeue would discard that completed cycle instead of fixing
|
|
4544
|
+
the one gate actually blocking it. `merge_gate_remedy_command` is the
|
|
4545
|
+
one place that maps a merge-gate reason to its safe one-line fix (or, if
|
|
4546
|
+
none is known blind, the inspect command); this only decides WHICH of
|
|
4547
|
+
the two families applies.
|
|
4548
|
+
"""
|
|
4549
|
+
if is_merge_gate_block_reason(reason):
|
|
4550
|
+
parsed = parse_key(key)
|
|
4551
|
+
if parsed is not None:
|
|
4552
|
+
return merge_gate_remedy_command(reason, parsed[0], parsed[1])
|
|
4553
|
+
return _requeue_command(entry, key)
|
|
4554
|
+
|
|
4555
|
+
|
|
4529
4556
|
@drive_queue_group.command("tick")
|
|
4530
4557
|
@click.option(
|
|
4531
4558
|
"--max-parallel",
|
|
@@ -5071,7 +5098,7 @@ def drive_queue_tick(
|
|
|
5071
5098
|
f"{entry.position if entry else '?'} | after="
|
|
5072
5099
|
f"{','.join(entry.after) if entry and entry.after else '(none)'}"
|
|
5073
5100
|
),
|
|
5074
|
-
command=
|
|
5101
|
+
command=_blocked_escalation_command(entry, item.key, item.reason),
|
|
5075
5102
|
)
|
|
5076
5103
|
|
|
5077
5104
|
# #2230: an entry #2230's sweep would have resumed, but has already
|
|
@@ -5098,7 +5125,7 @@ def drive_queue_tick(
|
|
|
5098
5125
|
f"/{MAX_BLOCKED_RESUMES} | position="
|
|
5099
5126
|
f"{entry.position if entry else '?'}"
|
|
5100
5127
|
),
|
|
5101
|
-
command=
|
|
5128
|
+
command=_blocked_escalation_command(entry, item.key, item.reason),
|
|
5102
5129
|
)
|
|
5103
5130
|
|
|
5104
5131
|
# #2806: a `blocked` entry #2230's sweep targeted this tick, but whose
|
|
@@ -5117,6 +5144,14 @@ def drive_queue_tick(
|
|
|
5117
5144
|
if parsed is None:
|
|
5118
5145
|
continue
|
|
5119
5146
|
entry = by_key.get(item.key)
|
|
5147
|
+
# #3016: NEVER the `remove && add` requeue here — `item.reason`
|
|
5148
|
+
# already says "the next tick re-probes rather than guessing"
|
|
5149
|
+
# (#2806); a destructive requeue directly contradicts that, and
|
|
5150
|
+
# would additionally discard a completed Work/Test/Review cycle
|
|
5151
|
+
# for no reason connected to what actually failed (a probe, not
|
|
5152
|
+
# a gate). The read-only inspect command is the only thing safe
|
|
5153
|
+
# to propose when the tick itself does not yet know what shape
|
|
5154
|
+
# this block is.
|
|
5120
5155
|
_escalate(
|
|
5121
5156
|
parsed[0],
|
|
5122
5157
|
parsed[1],
|
|
@@ -5125,7 +5160,7 @@ def drive_queue_tick(
|
|
|
5125
5160
|
f"queue_state=blocked | gate_reading=unreadable | "
|
|
5126
5161
|
f"position={entry.position if entry else '?'}"
|
|
5127
5162
|
),
|
|
5128
|
-
command=
|
|
5163
|
+
command=merge_plan_inspect_command(parsed[0]),
|
|
5129
5164
|
)
|
|
5130
5165
|
|
|
5131
5166
|
if plan.alert is not None:
|
|
@@ -723,7 +723,7 @@ def _run_decompose_chat_interactive(
|
|
|
723
723
|
from coord.agent import ( # noqa: PLC0415
|
|
724
724
|
AssignmentSpec as _AssignmentSpecDc,
|
|
725
725
|
DECOMPOSITION_CHAT_ATTENDED_ADDENDUM,
|
|
726
|
-
|
|
726
|
+
DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS,
|
|
727
727
|
DECOMPOSITION_CHAT_SYSTEM_PROMPT,
|
|
728
728
|
build_deny_prompt,
|
|
729
729
|
)
|
|
@@ -854,13 +854,21 @@ def _run_decompose_chat_interactive(
|
|
|
854
854
|
# This session, by contrast, has a human in the pane: the addendum makes
|
|
855
855
|
# its first turn confirm-then-write (#2742's absorbed half, which #2750
|
|
856
856
|
# only ever wired into mode SELECTION, never into the posture itself).
|
|
857
|
+
#
|
|
858
|
+
# #2998: the deny list here is the ATTENDED one — identical to the
|
|
859
|
+
# headless DECOMPOSITION_CHAT_DENY_COMMANDS except it does not blanket-
|
|
860
|
+
# forbid `coord portal decision confirm`, because DECOMPOSITION_CHAT_
|
|
861
|
+
# ATTENDED_ADDENDUM spells out the (narrow, operator-instruction-gated)
|
|
862
|
+
# condition under which this session may run it. The headless path above
|
|
863
|
+
# keeps using the unmodified list, so a headless session still cannot
|
|
864
|
+
# confirm, self-confirm, or be talked into confirming.
|
|
857
865
|
argv = provider.build_command(
|
|
858
866
|
spec,
|
|
859
867
|
resolved_model=resolved_model,
|
|
860
868
|
system_prompt=(
|
|
861
869
|
DECOMPOSITION_CHAT_SYSTEM_PROMPT
|
|
862
870
|
+ DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
|
|
863
|
-
+ build_deny_prompt(
|
|
871
|
+
+ build_deny_prompt(DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS)
|
|
864
872
|
),
|
|
865
873
|
allowed_tools="Read,Bash",
|
|
866
874
|
)
|
|
@@ -94,6 +94,7 @@ from coord.gate_a import is_gate_a_refusal_reason
|
|
|
94
94
|
from coord.github_ops import is_throttle_skip_reason, parse_throttle_skip_until
|
|
95
95
|
from coord.issues_sync_status import STALENESS_WARN_SECONDS as ISSUE_CACHE_STALE_CEILING_S
|
|
96
96
|
from coord.merge_queue import (
|
|
97
|
+
CI_STALE_PREFIX,
|
|
97
98
|
PLAN_READY,
|
|
98
99
|
ci_rollup_all_clear,
|
|
99
100
|
is_ci_flaky_reason,
|
|
@@ -2746,6 +2747,74 @@ def _is_merge_gate_block_reason(reason: str | None) -> bool:
|
|
|
2746
2747
|
return "merge_status=" in lowered
|
|
2747
2748
|
|
|
2748
2749
|
|
|
2750
|
+
def merge_plan_inspect_command(repo: str) -> str:
|
|
2751
|
+
"""The read-only ``coord merge --plan`` fallback (#3016) — safe to
|
|
2752
|
+
propose whenever no specific, blind-runnable remedy is known, because it
|
|
2753
|
+
never mutates anything. Used both as :func:`merge_gate_remedy_command`'s
|
|
2754
|
+
own fallback and directly by callers escalating a #2806 ``gate_unreadable``
|
|
2755
|
+
outcome, whose reason text already says "the next tick re-probes" — the
|
|
2756
|
+
destructive `remove && add` requeue would directly contradict that.
|
|
2757
|
+
"""
|
|
2758
|
+
return f"coord merge --plan --repo {repo}"
|
|
2759
|
+
|
|
2760
|
+
|
|
2761
|
+
def merge_gate_remedy_command(reason: str | None, repo: str, issue: int) -> str:
|
|
2762
|
+
"""The gate-specific one-line fix for a `_is_merge_gate_block_reason`
|
|
2763
|
+
block (#3016) — never the blanket ``drive-queue remove && add`` requeue
|
|
2764
|
+
a synthetic escalation writer would otherwise reach for by default.
|
|
2765
|
+
|
|
2766
|
+
A requeue is not merely useless for a merge-gate block, it is actively
|
|
2767
|
+
destructive: it discards a completed Work/Test/Review cycle to re-run it
|
|
2768
|
+
from scratch, when the real fix is a single, targeted merge-lane command
|
|
2769
|
+
— exactly the misdirection `_is_merge_gate_block_reason`'s own docstring
|
|
2770
|
+
already names two live escalations (claude-coordinator#2405, coord-web#2)
|
|
2771
|
+
as having produced, and #2424 only fixed on the prose (``reason``) side,
|
|
2772
|
+
leaving this — the field a one-click "Run proposed fix" menu actually
|
|
2773
|
+
executes — untouched.
|
|
2774
|
+
|
|
2775
|
+
Only the CI-stale / stale-but-passed-smoke shape has a remedy that is
|
|
2776
|
+
both KNOWN and SAFE to run blind: ``coord merge --revalidate --only
|
|
2777
|
+
<repo>#<issue>``, the exact command :func:`coord.merge_queue.
|
|
2778
|
+
ci_stale_reason`'s own prose already tells the operator to run (matched
|
|
2779
|
+
textually here — via :data:`coord.merge_queue.CI_STALE_PREFIX` and
|
|
2780
|
+
:func:`is_stale_smoke_reason` — rather than re-derived, so the two can
|
|
2781
|
+
never diverge on what "CI stale" means).
|
|
2782
|
+
|
|
2783
|
+
Every other shape this matches — red CI (``checks failed``), a
|
|
2784
|
+
review/smoke gate divergence (``review_required —``/``smoke_required
|
|
2785
|
+
—``), an opaque terminal ``merge_status=`` — has no single command that
|
|
2786
|
+
is always both correct and safe to run without a human first reading
|
|
2787
|
+
the actual gate state (fixing a named CI check, recovering or re-running
|
|
2788
|
+
a review, deciding a UAT verdict). Guessing wrong there is worse than
|
|
2789
|
+
not guessing: the menu this feeds runs the command on one click. So
|
|
2790
|
+
every one of those falls back to the read-only inspect command instead
|
|
2791
|
+
— see #3016's design note ("a wrong 'Recommended' is worse than no
|
|
2792
|
+
recommendation").
|
|
2793
|
+
|
|
2794
|
+
Callers are expected to gate on :func:`_is_merge_gate_block_reason`
|
|
2795
|
+
first; called on a reason that ISN'T a merge-gate block at all, this
|
|
2796
|
+
still returns the safe inspect fallback rather than raising — there is
|
|
2797
|
+
no reason this text-matching helper needs to enforce that precondition
|
|
2798
|
+
itself when a wrong answer here is never destructive.
|
|
2799
|
+
"""
|
|
2800
|
+
if reason and (
|
|
2801
|
+
CI_STALE_PREFIX.lower() in reason.lower() or is_stale_smoke_reason(reason)
|
|
2802
|
+
):
|
|
2803
|
+
return f"coord merge --revalidate --only {entry_key(repo, issue)}"
|
|
2804
|
+
return merge_plan_inspect_command(repo)
|
|
2805
|
+
|
|
2806
|
+
|
|
2807
|
+
def is_merge_gate_block_reason(reason: str | None) -> bool:
|
|
2808
|
+
"""Public alias for :func:`_is_merge_gate_block_reason` (#3016).
|
|
2809
|
+
|
|
2810
|
+
Same convention as ``is_empty_branch_death_reason``/
|
|
2811
|
+
``is_unsatisfiable_prereq_reason``: the classifier is shared with the
|
|
2812
|
+
synthetic escalation writers in ``coord.commands.drive_queue``, so it
|
|
2813
|
+
gets a non-underscored name rather than a second copy of the text match.
|
|
2814
|
+
"""
|
|
2815
|
+
return _is_merge_gate_block_reason(reason)
|
|
2816
|
+
|
|
2817
|
+
|
|
2749
2818
|
def _is_empty_branch_death_reason(reason: str | None) -> bool:
|
|
2750
2819
|
"""#2363: does *reason* name the "claimed success, wrote nothing"
|
|
2751
2820
|
signature — an acceptance-author or plain work session that exited
|
|
@@ -1987,6 +1987,78 @@ def test_a_dead_drives_own_exit_reason_reaches_the_queue_row(
|
|
|
1987
1987
|
assert state._get_drive_escalation_local(REPO, 1762) is not None
|
|
1988
1988
|
|
|
1989
1989
|
|
|
1990
|
+
def test_exhausted_ci_stale_escalation_proposes_revalidate_not_a_requeue(
|
|
1991
|
+
cli, seed, launches, coord_db, config_file
|
|
1992
|
+
):
|
|
1993
|
+
"""#3016 regression fixture — the exact claude-coordinator#2983 shape
|
|
1994
|
+
(2026-08-31), rendered end-to-end through the real `coord drive-queue
|
|
1995
|
+
tick` -> escalation write -> `coord escalate list` path: a merge-gate
|
|
1996
|
+
death whose OWN reason already names `coord merge --revalidate` as the
|
|
1997
|
+
fix must not have the escalation's `proposed_command` — the ONE field a
|
|
1998
|
+
one-click "Run proposed fix" menu actually runs — propose the blanket
|
|
1999
|
+
`drive-queue remove && add` requeue instead. #2424 already fixed the
|
|
2000
|
+
parallel misdirection in the `reason` prose; this pins the field that
|
|
2001
|
+
executes.
|
|
2002
|
+
"""
|
|
2003
|
+
from coord.audit import record_audit
|
|
2004
|
+
|
|
2005
|
+
seed(issues={2983: "open"})
|
|
2006
|
+
cli("add", REPO, "2983")
|
|
2007
|
+
cli("tick")
|
|
2008
|
+
|
|
2009
|
+
def _own_reason(n: int) -> str:
|
|
2010
|
+
return (
|
|
2011
|
+
f"drive exited for {REPO}#2983 (exit_code=1): merge attempted "
|
|
2012
|
+
f"3 times without landing.\n"
|
|
2013
|
+
" Last board state: status='PENDING' reason='CI stale: checks "
|
|
2014
|
+
"predate the current base (...); auto-rerun budget exhausted "
|
|
2015
|
+
"(2/2) — re-run CI (`coord merge --revalidate`) before merging'"
|
|
2016
|
+
f" (attempt {n})"
|
|
2017
|
+
)
|
|
2018
|
+
|
|
2019
|
+
launched_at = queued(2983)["launched_at"]
|
|
2020
|
+
_backdate(2983, DRIVE_STARTUP_GRACE_SECONDS + 60)
|
|
2021
|
+
record_audit(
|
|
2022
|
+
tier="business", category="drive", event_type="drive_exited",
|
|
2023
|
+
actor="drive", summary=_own_reason(1), repo=REPO, issue=2983,
|
|
2024
|
+
ts=launched_at + 5,
|
|
2025
|
+
)
|
|
2026
|
+
cli("tick")
|
|
2027
|
+
|
|
2028
|
+
_backdate_reason(coord_db, 2983, DRIVE_STARTUP_GRACE_SECONDS + 60)
|
|
2029
|
+
relaunch = cli("tick")
|
|
2030
|
+
assert relaunch.exit_code == 0, relaunch.output
|
|
2031
|
+
assert queued(2983)["state"] == "running"
|
|
2032
|
+
|
|
2033
|
+
launched_at = queued(2983)["launched_at"]
|
|
2034
|
+
_backdate(2983, DRIVE_STARTUP_GRACE_SECONDS + 60)
|
|
2035
|
+
record_audit(
|
|
2036
|
+
tier="business", category="drive", event_type="drive_exited",
|
|
2037
|
+
actor="drive", summary=_own_reason(2), repo=REPO, issue=2983,
|
|
2038
|
+
ts=launched_at + 5,
|
|
2039
|
+
)
|
|
2040
|
+
second_retry = cli("tick")
|
|
2041
|
+
assert second_retry.exit_code == 0, second_retry.output
|
|
2042
|
+
|
|
2043
|
+
entry = queued(2983)
|
|
2044
|
+
assert entry["state"] == "blocked"
|
|
2045
|
+
|
|
2046
|
+
listing = CliRunner().invoke(
|
|
2047
|
+
main, ["escalate", "list", "--config", str(config_file)]
|
|
2048
|
+
)
|
|
2049
|
+
assert listing.exit_code == 0, listing.output
|
|
2050
|
+
assert f"{REPO} #2983" in listing.output
|
|
2051
|
+
assert "coord merge --revalidate" in listing.output
|
|
2052
|
+
assert f"--only {REPO}#2983" in listing.output
|
|
2053
|
+
assert "drive-queue remove" not in listing.output
|
|
2054
|
+
assert "drive-queue add" not in listing.output
|
|
2055
|
+
|
|
2056
|
+
escalation = state._get_drive_escalation_local(REPO, 2983)
|
|
2057
|
+
assert escalation is not None
|
|
2058
|
+
proposed = escalation["proposed_command"]
|
|
2059
|
+
assert proposed == f"coord merge --revalidate --only {REPO}#2983"
|
|
2060
|
+
|
|
2061
|
+
|
|
1990
2062
|
def test_a_permanent_dispatch_refusal_blocks_on_the_first_tick_no_attempt_spent(
|
|
1991
2063
|
cli, seed, launches,
|
|
1992
2064
|
):
|
|
@@ -10,6 +10,7 @@ import pytest
|
|
|
10
10
|
from coord import decomposition_chat
|
|
11
11
|
from coord.agent import (
|
|
12
12
|
AssignmentSpec,
|
|
13
|
+
DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS,
|
|
13
14
|
DECOMPOSITION_CHAT_DENY_COMMANDS,
|
|
14
15
|
DECOMPOSITION_CHAT_SYSTEM_PROMPT,
|
|
15
16
|
WRITE_CAPABLE_SPEC_TYPES,
|
|
@@ -1108,6 +1109,116 @@ def test_deny_list_blocks_self_confirming_a_proposal():
|
|
|
1108
1109
|
assert "Bash(coord portal decision confirm *)" in DECOMPOSITION_CHAT_DENY_COMMANDS
|
|
1109
1110
|
|
|
1110
1111
|
|
|
1112
|
+
# ── #2998: attended sessions may confirm on explicit operator instruction ──
|
|
1113
|
+
|
|
1114
|
+
|
|
1115
|
+
def test_attended_deny_list_omits_only_decision_confirm():
|
|
1116
|
+
"""The attended deny list is the headless one minus exactly one entry —
|
|
1117
|
+
`coord portal decision confirm`. Every genuinely dangerous entry (raw
|
|
1118
|
+
`gh` mutations, `git push`/`commit`, destructive git, `coord approve`/
|
|
1119
|
+
`merge`/`assign`) must stay denied in both postures."""
|
|
1120
|
+
assert (
|
|
1121
|
+
"Bash(coord portal decision confirm *)"
|
|
1122
|
+
not in DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS
|
|
1123
|
+
)
|
|
1124
|
+
removed = set(DECOMPOSITION_CHAT_DENY_COMMANDS) - set(
|
|
1125
|
+
DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS
|
|
1126
|
+
)
|
|
1127
|
+
assert removed == {"Bash(coord portal decision confirm *)"}
|
|
1128
|
+
# Nothing was added that wasn't already on the headless list.
|
|
1129
|
+
assert set(DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS) <= set(
|
|
1130
|
+
DECOMPOSITION_CHAT_DENY_COMMANDS
|
|
1131
|
+
)
|
|
1132
|
+
|
|
1133
|
+
|
|
1134
|
+
def test_headless_deny_list_is_untouched_by_the_attended_carve_out():
|
|
1135
|
+
"""Acceptance bar: "the headless posture is unchanged" — the constant the
|
|
1136
|
+
headless dispatch path actually uses still hard-denies confirm."""
|
|
1137
|
+
assert "Bash(coord portal decision confirm *)" in DECOMPOSITION_CHAT_DENY_COMMANDS
|
|
1138
|
+
|
|
1139
|
+
|
|
1140
|
+
def test_attended_addendum_permits_confirm_on_explicit_operator_instruction():
|
|
1141
|
+
from coord.agent import DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
|
|
1142
|
+
|
|
1143
|
+
assert "#2998" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
|
|
1144
|
+
assert "coord portal decision confirm" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
|
|
1145
|
+
# Requires an explicit, present-turn instruction — never inferred assent.
|
|
1146
|
+
assert "EXPLICIT, PRESENT-TURN instruction" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
|
|
1147
|
+
assert "own initiative" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
|
|
1148
|
+
# Attribution: a ledger note recorded BEFORE the confirm runs.
|
|
1149
|
+
assert "coord portal note" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
|
|
1150
|
+
assert "Operator instructed" in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
|
|
1151
|
+
confirm_section = DECOMPOSITION_CHAT_ATTENDED_ADDENDUM.split(
|
|
1152
|
+
"Confirming a decision on the operator's instruction"
|
|
1153
|
+
)[1]
|
|
1154
|
+
assert confirm_section.index("coord portal note") < confirm_section.index(
|
|
1155
|
+
"coord portal decision confirm <submission_id> <seq>"
|
|
1156
|
+
)
|
|
1157
|
+
# The dangerous entries are called out as staying forbidden regardless.
|
|
1158
|
+
assert "coord approve" in confirm_section
|
|
1159
|
+
assert "coord merge" in confirm_section
|
|
1160
|
+
assert "git push" in confirm_section
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
def test_cli_interactive_dry_run_permits_confirm_but_keeps_dangerous_entries_denied():
|
|
1164
|
+
"""The system prompt `_run_decompose_chat_interactive` actually builds
|
|
1165
|
+
must not list `coord portal decision confirm` under FORBIDDEN COMMANDS
|
|
1166
|
+
(the addendum, not a blanket deny, governs it) while every dangerous
|
|
1167
|
+
entry stays listed."""
|
|
1168
|
+
from click.testing import CliRunner
|
|
1169
|
+
|
|
1170
|
+
from coord.commands.portal import portal_group
|
|
1171
|
+
|
|
1172
|
+
runner = CliRunner()
|
|
1173
|
+
local = _machine("here", ["api"])
|
|
1174
|
+
cfg = Config(repos=[_repo("api")], machines=[local])
|
|
1175
|
+
with patch("coord.commands.portal._load_config", return_value=cfg), patch(
|
|
1176
|
+
"coord.decomposition_chat.resolve_approved_submission", return_value=SUBMISSION
|
|
1177
|
+
), patch("coord.test_orchestrator.local_machine", return_value=local), patch(
|
|
1178
|
+
"coord.board_service.resolve", return_value=None
|
|
1179
|
+
), patch("coord.state.record_dispatched_assignment"), patch(
|
|
1180
|
+
"coord.interactive.launch_human_attended_interactive"
|
|
1181
|
+
):
|
|
1182
|
+
result = runner.invoke(
|
|
1183
|
+
portal_group,
|
|
1184
|
+
["decompose-chat", "sub_2f6a1c", "--interactive", "--discuss", "--dry-run"],
|
|
1185
|
+
)
|
|
1186
|
+
assert result.exit_code == 0, result.output
|
|
1187
|
+
forbidden_section = result.output.split("FORBIDDEN")[-1]
|
|
1188
|
+
assert "coord portal decision confirm" not in forbidden_section
|
|
1189
|
+
assert "coord approve" in forbidden_section
|
|
1190
|
+
assert "coord merge" in forbidden_section
|
|
1191
|
+
assert "git push" in forbidden_section
|
|
1192
|
+
assert "rm -rf" in forbidden_section
|
|
1193
|
+
# ...but the addendum's own gated carve-out is present elsewhere in the
|
|
1194
|
+
# prompt, spelling out how confirm may be used.
|
|
1195
|
+
assert "#2998" in result.output
|
|
1196
|
+
assert "coord portal note" in result.output
|
|
1197
|
+
|
|
1198
|
+
|
|
1199
|
+
def test_default_worker_command_decomposition_chat_still_forbids_confirm():
|
|
1200
|
+
"""Headless-unchanged regression guard: the actual argv the headless
|
|
1201
|
+
dispatch path builds still lists `coord portal decision confirm` under
|
|
1202
|
+
FORBIDDEN COMMANDS, with no operator-instruction carve-out text at all
|
|
1203
|
+
(that text lives only in DECOMPOSITION_CHAT_ATTENDED_ADDENDUM, which the
|
|
1204
|
+
headless path never appends — see
|
|
1205
|
+
test_headless_decomposition_chat_prompt_has_no_attended_posture)."""
|
|
1206
|
+
spec = AssignmentSpec(
|
|
1207
|
+
repo_name="r",
|
|
1208
|
+
repo_path="/tmp/r",
|
|
1209
|
+
issue_number=0,
|
|
1210
|
+
issue_title="decomposition: sub_2f6a1c",
|
|
1211
|
+
briefing="b",
|
|
1212
|
+
type="decomposition-chat",
|
|
1213
|
+
)
|
|
1214
|
+
argv = default_worker_command(spec)
|
|
1215
|
+
idx = argv.index("--system-prompt")
|
|
1216
|
+
system_prompt = argv[idx + 1]
|
|
1217
|
+
forbidden_section = system_prompt.split("FORBIDDEN")[-1]
|
|
1218
|
+
assert "coord portal decision confirm" in forbidden_section
|
|
1219
|
+
assert "#2998" not in system_prompt
|
|
1220
|
+
|
|
1221
|
+
|
|
1111
1222
|
# ── #2750 (IL-4): `coord portal decompose-chat` CLI — --discuss/--interactive ──
|
|
1112
1223
|
|
|
1113
1224
|
|
|
@@ -46,6 +46,9 @@ from coord.drive_queue import (
|
|
|
46
46
|
entry_key,
|
|
47
47
|
find_cycle,
|
|
48
48
|
is_empty_branch_death_reason,
|
|
49
|
+
is_merge_gate_block_reason,
|
|
50
|
+
merge_gate_remedy_command,
|
|
51
|
+
merge_plan_inspect_command,
|
|
49
52
|
parse_after_spec,
|
|
50
53
|
parse_key,
|
|
51
54
|
plan_tick,
|
|
@@ -5468,3 +5471,82 @@ def test_detect_unreachable_waits_reproduces_the_ms5_incident_shape():
|
|
|
5468
5471
|
assert dep.key not in alert.reason
|
|
5469
5472
|
assert "8 dependent entries" in alert.reason
|
|
5470
5473
|
assert "self-heal" in alert.reason
|
|
5474
|
+
|
|
5475
|
+
|
|
5476
|
+
# ── #3016: the escalation-time remedy for a merge-gate block must be the ──
|
|
5477
|
+
# gate-specific fix, never the blanket `drive-queue remove && add` requeue —
|
|
5478
|
+
# a requeue discards a completed Work/Test/Review cycle instead of fixing
|
|
5479
|
+
# the one gate actually stuck. `merge_gate_remedy_command` is the mapping;
|
|
5480
|
+
# `is_merge_gate_block_reason` (already exercised elsewhere via #2424) is
|
|
5481
|
+
# what a caller gates on before reaching for it.
|
|
5482
|
+
|
|
5483
|
+
|
|
5484
|
+
def test_merge_gate_remedy_command_is_the_2983_regression_fixture():
|
|
5485
|
+
"""The exact claude-coordinator#2983 shape (2026-08-31): a `merge
|
|
5486
|
+
attempted N times without landing` death whose OWN reason already names
|
|
5487
|
+
`coord merge --revalidate` as the fix must map to a scoped revalidate
|
|
5488
|
+
command, never a requeue."""
|
|
5489
|
+
reason = (
|
|
5490
|
+
"drive exited (exit_code=1): merge attempted 3 times without "
|
|
5491
|
+
"landing.\n Last board state: status='PENDING' reason='CI stale: "
|
|
5492
|
+
"checks predate the current base (...); auto-rerun budget exhausted "
|
|
5493
|
+
"(2/2) — re-run CI (`coord merge --revalidate`) before merging'"
|
|
5494
|
+
)
|
|
5495
|
+
assert is_merge_gate_block_reason(reason) is True
|
|
5496
|
+
command = merge_gate_remedy_command(reason, REPO, 2983)
|
|
5497
|
+
assert command == f"coord merge --revalidate --only {REPO}#2983"
|
|
5498
|
+
assert "drive-queue remove" not in command
|
|
5499
|
+
assert "drive-queue add" not in command
|
|
5500
|
+
|
|
5501
|
+
|
|
5502
|
+
def test_merge_gate_remedy_command_handles_a_stale_smoke_verdict():
|
|
5503
|
+
"""The #1479 staleness race — `is_stale_smoke_reason` matches even
|
|
5504
|
+
without the `CI stale:` prefix at all — same remedy, same reasoning."""
|
|
5505
|
+
reason = "smoke test verdict is stale: recorded against base abc123, base is now def456"
|
|
5506
|
+
assert is_merge_gate_block_reason(reason) is True
|
|
5507
|
+
command = merge_gate_remedy_command(reason, REPO, 1650)
|
|
5508
|
+
assert command == f"coord merge --revalidate --only {REPO}#1650"
|
|
5509
|
+
|
|
5510
|
+
|
|
5511
|
+
def test_merge_gate_remedy_command_falls_back_to_inspect_for_red_ci():
|
|
5512
|
+
"""`checks failed` (red CI) has no safe one-line auto-fix — the correct
|
|
5513
|
+
remedy is "fix the named check", which is not a command this can hand
|
|
5514
|
+
an operator to run blind. Falls back to the read-only inspect command
|
|
5515
|
+
rather than a requeue or a guess."""
|
|
5516
|
+
reason = "checks failed: build (exit 1)"
|
|
5517
|
+
assert is_merge_gate_block_reason(reason) is True
|
|
5518
|
+
command = merge_gate_remedy_command(reason, REPO, 1650)
|
|
5519
|
+
assert command == merge_plan_inspect_command(REPO)
|
|
5520
|
+
assert "revalidate" not in command
|
|
5521
|
+
assert "drive-queue remove" not in command
|
|
5522
|
+
|
|
5523
|
+
|
|
5524
|
+
def test_merge_gate_remedy_command_falls_back_to_inspect_for_review_required():
|
|
5525
|
+
reason = (
|
|
5526
|
+
"review_required — coord merge's own gate reports 'review missing', "
|
|
5527
|
+
"but this driver's OWN view already shows review_verdict='approved'"
|
|
5528
|
+
)
|
|
5529
|
+
assert is_merge_gate_block_reason(reason) is True
|
|
5530
|
+
assert merge_gate_remedy_command(reason, REPO, 1650) == merge_plan_inspect_command(REPO)
|
|
5531
|
+
|
|
5532
|
+
|
|
5533
|
+
def test_merge_gate_remedy_command_falls_back_to_inspect_for_smoke_required():
|
|
5534
|
+
reason = "smoke_required — coord merge's own gate reports 'no verdict'"
|
|
5535
|
+
assert is_merge_gate_block_reason(reason) is True
|
|
5536
|
+
assert merge_gate_remedy_command(reason, REPO, 1650) == merge_plan_inspect_command(REPO)
|
|
5537
|
+
|
|
5538
|
+
|
|
5539
|
+
def test_merge_gate_remedy_command_falls_back_to_inspect_for_opaque_merge_status():
|
|
5540
|
+
reason = "merge_status=NEEDS_ATTENTION — no number of retries changes this"
|
|
5541
|
+
assert is_merge_gate_block_reason(reason) is True
|
|
5542
|
+
assert merge_gate_remedy_command(reason, REPO, 1650) == merge_plan_inspect_command(REPO)
|
|
5543
|
+
|
|
5544
|
+
|
|
5545
|
+
def test_merge_gate_remedy_command_is_the_safe_inspect_fallback_for_none_and_non_block_reasons():
|
|
5546
|
+
"""Never raises — called on a reason that isn't a merge-gate block at
|
|
5547
|
+
all (or is missing entirely), it still returns the safe, read-only
|
|
5548
|
+
fallback rather than asserting a precondition on its caller."""
|
|
5549
|
+
assert merge_gate_remedy_command(None, REPO, 1650) == merge_plan_inspect_command(REPO)
|
|
5550
|
+
ordinary = "no candidate machine available for claude-coordinator#1650"
|
|
5551
|
+
assert is_merge_gate_block_reason(ordinary) is False
|
|
5552
|
+
assert merge_gate_remedy_command(ordinary, REPO, 1650) == merge_plan_inspect_command(REPO)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.328 → code_coordinator-0.5.330}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|