code-coordinator 0.5.267__tar.gz → 0.5.269__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.267 → code_coordinator-0.5.269}/PKG-INFO +1 -1
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/drive_queue.py +113 -9
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/release.py +71 -5
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/drive.py +117 -8
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/drive_queue.py +60 -9
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/drive_state.py +25 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_release_propagate.py +31 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_release_window.py +53 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive.py +65 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue.py +17 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_state.py +38 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_propagate_threshold.py +56 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_roll_window_handoff.py +93 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/.gitignore +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/CLAUDE.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/GOAL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/LICENSE +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/MANIFEST.in +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/README.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/__init__.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agent.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/audit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/block_log.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/board_service.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/brain.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/claim.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/cli.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/client.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/comments.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/config.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dao.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/db.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/deps.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/events.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/filelock.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/freshness.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/gates.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/goal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/context.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/models.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/render.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/health/units.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/hooks.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/interactive.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/models.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/network.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/notify.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/openapi.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/parentage.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/plans.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/progress.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/release_window.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/reports.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/review.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/self_health.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/smoke.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/split_work.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/sql.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/state.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/test_author.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/test_report.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/usage.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/install-agent.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/pyproject.toml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/setup.cfg +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/__init__.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/conftest.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_db.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_events.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_init.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_models.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_network.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_session.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_split.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_state.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/types/generated.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.267 → code_coordinator-0.5.269}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -2587,6 +2587,68 @@ def clear_roll_pending() -> None:
|
|
|
2587
2587
|
pass
|
|
2588
2588
|
|
|
2589
2589
|
|
|
2590
|
+
def _roll_pending_may_fire(*, occupied: int, now: float, queue_rows) -> tuple[bool, str]:
|
|
2591
|
+
"""Is it worth attempting to fire a pending roll THIS tick? (#2870 part 2)
|
|
2592
|
+
|
|
2593
|
+
#2587's original rule was ``occupied == 0`` — this tick's own
|
|
2594
|
+
reconciliation (`_reconcile_running`'s ``occupies`` verdict) found
|
|
2595
|
+
literally nothing left running. That rule never learned #2854: `coord
|
|
2596
|
+
release propagate`'s own quiescence check
|
|
2597
|
+
(:func:`coord.release_propagate.assess_quiescence`) treats a `running`
|
|
2598
|
+
drive-queue row with no LIVE assignment right now, past its settle
|
|
2599
|
+
window, as genuinely idle — the row just hasn't reached a terminal state
|
|
2600
|
+
yet (nothing has reconciled it to ``done``). This tick's own ``occupied``
|
|
2601
|
+
count has no such reading: a between-legs row launched on a different
|
|
2602
|
+
host reads ``unknown`` here (#1870 — this tick's local tmux check proves
|
|
2603
|
+
nothing about a row launched elsewhere) and stays charged, forever,
|
|
2604
|
+
against an ``occupied == 0`` bar it can never clear. The 2026-08-28
|
|
2605
|
+
incident this closes: `coord release propagate`, run directly, reported
|
|
2606
|
+
``quiescent — nothing in flight`` (between-legs, past the settle window)
|
|
2607
|
+
for the SAME row this tick's own ``occupied`` reading was still counting
|
|
2608
|
+
— so the tick never even ATTEMPTED the roll `coord release propagate`
|
|
2609
|
+
would have accepted.
|
|
2610
|
+
|
|
2611
|
+
``occupied == 0`` stays the cheap fast path — no extra board read. Only
|
|
2612
|
+
when it is nonzero does this re-derive the SAME between-legs/settle-
|
|
2613
|
+
window reading `coord release propagate` itself makes, from a fresh
|
|
2614
|
+
board fetch. This is an ADVISORY re-check, not the authoritative one:
|
|
2615
|
+
firing merely hands off to `coord-release-window.service`, which invokes
|
|
2616
|
+
`coord release propagate` for real (never `--force`) and simply defers
|
|
2617
|
+
again — costing nothing — if this read turns out to have been too
|
|
2618
|
+
optimistic. So there is no harm in checking, and every reason to: the
|
|
2619
|
+
alternative is a marker that can sit past its own between-legs row
|
|
2620
|
+
forever with `coord drive-queue status` reporting `alert: (none)` the
|
|
2621
|
+
whole time, because from the queue's own point of view nothing is wrong
|
|
2622
|
+
— it is waiting on a roll, exactly as designed.
|
|
2623
|
+
|
|
2624
|
+
*queue_rows* are the SAME raw `drive_queue` rows this tick already read
|
|
2625
|
+
(`coord.state.list_drive_queue()`) — reused rather than re-fetched, and
|
|
2626
|
+
passed straight through as `assess_quiescence`'s ``queue_entries``: that
|
|
2627
|
+
function reads the raw ``state``/``repo_name``/``issue_number`` columns,
|
|
2628
|
+
not `QueueEntry` or `BoardView`'s reduced shapes.
|
|
2629
|
+
|
|
2630
|
+
A board this cannot read degrades to "no, don't fire" (never raises) —
|
|
2631
|
+
the tick's own fail-closed abort already covers a board it cannot read
|
|
2632
|
+
for reconciliation; a re-check that itself cannot read the board must
|
|
2633
|
+
not provoke a fire it cannot justify.
|
|
2634
|
+
"""
|
|
2635
|
+
if occupied == 0:
|
|
2636
|
+
return True, ""
|
|
2637
|
+
from coord import release_propagate as rp # noqa: PLC0415
|
|
2638
|
+
|
|
2639
|
+
try:
|
|
2640
|
+
payload = _fetch_board_payload()
|
|
2641
|
+
except Exception: # noqa: BLE001 — see docstring: fail closed, never raise
|
|
2642
|
+
return False, ""
|
|
2643
|
+
quiescence = rp.assess_quiescence(
|
|
2644
|
+
queue_entries=queue_rows,
|
|
2645
|
+
assignments=payload.get("assignments") or [],
|
|
2646
|
+
issues=payload.get("issues") or [],
|
|
2647
|
+
now=now,
|
|
2648
|
+
)
|
|
2649
|
+
return quiescence.quiescent, quiescence.reason
|
|
2650
|
+
|
|
2651
|
+
|
|
2590
2652
|
def _fire_pending_roll(*, dry_run: bool = False) -> tuple[bool, str]:
|
|
2591
2653
|
"""Best-effort ``systemctl --user start --no-block
|
|
2592
2654
|
coord-release-window.service`` (#2587 design point 3).
|
|
@@ -2954,16 +3016,22 @@ def _escalate_persistent_self_cordon(
|
|
|
2954
3016
|
_write_self_cordon_state(state)
|
|
2955
3017
|
|
|
2956
3018
|
|
|
2957
|
-
def
|
|
2958
|
-
"""
|
|
3019
|
+
def _fetch_board_payload() -> dict:
|
|
3020
|
+
"""The raw ``/board`` payload (+ standalone top-ups), untyped.
|
|
2959
3021
|
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
3022
|
+
Split out of :func:`_fetch_board_view` (#2870) so a caller that needs the
|
|
3023
|
+
RAW ``assignments``/``issues`` rows — not `BoardView`'s already-reduced
|
|
3024
|
+
per-issue facts — has one place to get them. :func:`coord.
|
|
3025
|
+
release_propagate.assess_quiescence` is exactly such a caller (#2870's
|
|
3026
|
+
between-legs settle-window re-check for the roll-pending fire condition,
|
|
3027
|
+
see :func:`_roll_pending_may_fire`): it reads raw assignment rows
|
|
3028
|
+
(``machine_name``/``dispatched_at``/``finished_at``) `BoardView` never
|
|
3029
|
+
carries at all.
|
|
3030
|
+
|
|
3031
|
+
Raises whatever the fetch raised — same fail-closed contract as before
|
|
3032
|
+
this split.
|
|
2964
3033
|
"""
|
|
2965
3034
|
from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
|
|
2966
|
-
from coord.drive import list_drive_sessions # noqa: PLC0415
|
|
2967
3035
|
from coord.drive_state import BoardFetcher # noqa: PLC0415
|
|
2968
3036
|
|
|
2969
3037
|
payload = BoardFetcher().fetch()
|
|
@@ -2986,6 +3054,20 @@ def _fetch_board_view() -> BoardView:
|
|
|
2986
3054
|
top_up["merge_queue"] = _local_merge_queue_rows()
|
|
2987
3055
|
if top_up:
|
|
2988
3056
|
payload = {**payload, **top_up}
|
|
3057
|
+
return payload
|
|
3058
|
+
|
|
3059
|
+
|
|
3060
|
+
def _fetch_board_view() -> BoardView:
|
|
3061
|
+
"""Board + live drive sessions, typed.
|
|
3062
|
+
|
|
3063
|
+
Raises whatever the fetch raised — the caller turns that into a fail-closed
|
|
3064
|
+
abort. ``list_drive_sessions()`` is deliberately NOT allowed to fail the
|
|
3065
|
+
tick: it returns ``[]`` when tmux is unavailable, and the board's
|
|
3066
|
+
``active_work`` signal still holds the capacity line in that case.
|
|
3067
|
+
"""
|
|
3068
|
+
from coord.drive import list_drive_sessions # noqa: PLC0415
|
|
3069
|
+
|
|
3070
|
+
payload = _fetch_board_payload()
|
|
2989
3071
|
return build_board_view(payload, list_drive_sessions())
|
|
2990
3072
|
|
|
2991
3073
|
|
|
@@ -4382,7 +4464,12 @@ def drive_queue_tick(
|
|
|
4382
4464
|
f"could not read the board — aborting without launching anything: {exc}"
|
|
4383
4465
|
) from None
|
|
4384
4466
|
|
|
4385
|
-
entries
|
|
4467
|
+
# #2870: the raw rows are kept alongside the typed `entries` — see
|
|
4468
|
+
# `_roll_pending_may_fire`'s `queue_rows` parameter, which needs the
|
|
4469
|
+
# untyped `state`/`repo_name`/`issue_number` shape
|
|
4470
|
+
# `coord.release_propagate.assess_quiescence` reads, not `QueueEntry`.
|
|
4471
|
+
raw_queue_rows = list_drive_queue()
|
|
4472
|
+
entries = entries_from_rows(raw_queue_rows)
|
|
4386
4473
|
|
|
4387
4474
|
# #2587: is a fleet roll queued for the next inter-drive gap? Read
|
|
4388
4475
|
# BEFORE `effective_capacity` is resolved — a live, unexpired marker
|
|
@@ -4563,7 +4650,24 @@ def drive_queue_tick(
|
|
|
4563
4650
|
# `--dry-run`'s "mutate nothing" contract for every other write in
|
|
4564
4651
|
# this function.
|
|
4565
4652
|
if roll_pending is not None:
|
|
4566
|
-
|
|
4653
|
+
# #2870: `plan.occupied == 0` alone is the pre-#2854 reading —
|
|
4654
|
+
# a between-legs row with no live assignment right now, past
|
|
4655
|
+
# its settle window, can sit `occupied` here (e.g. #1870's
|
|
4656
|
+
# `unknown` verdict for a row launched on another host)
|
|
4657
|
+
# forever, even though `coord release propagate` itself would
|
|
4658
|
+
# already call the fleet quiescent for that exact row. See
|
|
4659
|
+
# `_roll_pending_may_fire`'s own docstring for the full
|
|
4660
|
+
# mechanism and the incident this closes.
|
|
4661
|
+
fire_ready, fire_note = _roll_pending_may_fire(
|
|
4662
|
+
occupied=plan.occupied, now=now, queue_rows=raw_queue_rows
|
|
4663
|
+
)
|
|
4664
|
+
if fire_ready:
|
|
4665
|
+
if plan.occupied and fire_note:
|
|
4666
|
+
click.echo(
|
|
4667
|
+
f"(queue still shows {plan.occupied} occupying a slot, "
|
|
4668
|
+
f"but #2854's settle-window reading calls it quiescent — "
|
|
4669
|
+
f"{fire_note} — attempting the roll anyway)"
|
|
4670
|
+
)
|
|
4567
4671
|
fired, detail = _fire_pending_roll()
|
|
4568
4672
|
if fired:
|
|
4569
4673
|
# #2587 review: this must NOT clear the marker. `fired`
|
|
@@ -654,11 +654,24 @@ def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
|
|
|
654
654
|
|
|
655
655
|
|
|
656
656
|
def _ensure_roll_pending_marker(
|
|
657
|
-
target_version: str, *, reason: str,
|
|
657
|
+
target_version: str, *, reason: str, min_releases_behind: int | None = None,
|
|
658
|
+
dry_run: bool = False,
|
|
658
659
|
) -> None:
|
|
659
660
|
"""#2587: make sure a roll-pending marker exists for *target_version*,
|
|
660
661
|
without resetting an already-live one's clock.
|
|
661
662
|
|
|
663
|
+
#2870: *min_releases_behind* is the effective `propagation.
|
|
664
|
+
min_releases_behind`/`--min-behind` threshold THIS run resolved and
|
|
665
|
+
already gated on before reaching this call (see the #2583 gate just
|
|
666
|
+
above this function's one call site) — stamped onto the marker
|
|
667
|
+
(`RollPending.min_releases_behind`) so whatever eventually discharges it
|
|
668
|
+
(`coord.commands.release._run_propagate`, threaded a matching
|
|
669
|
+
`--min-behind`) is gated at the SAME threshold this arm used, not
|
|
670
|
+
whatever threshold ITS OWN invocation happens to resolve. Like
|
|
671
|
+
`target_version`/`reason`, this is updated on every re-arm (a re-arm is
|
|
672
|
+
a fresh decision about what SHOULD roll and at what threshold) — only
|
|
673
|
+
`set_at`/`deferrals` stay frozen (see below).
|
|
674
|
+
|
|
662
675
|
#2869: ``dry_run=True`` is the ONE seam every call site must go through —
|
|
663
676
|
it never touches disk, only echoing what it *would* have written, in the
|
|
664
677
|
same "would ..." register as ``_fire_pending_roll``'s and
|
|
@@ -712,7 +725,10 @@ def _ensure_roll_pending_marker(
|
|
|
712
725
|
)
|
|
713
726
|
return
|
|
714
727
|
write_roll_pending(
|
|
715
|
-
_dataclasses.replace(
|
|
728
|
+
_dataclasses.replace(
|
|
729
|
+
existing, target_version=target_version, reason=reason,
|
|
730
|
+
min_releases_behind=min_releases_behind,
|
|
731
|
+
)
|
|
716
732
|
)
|
|
717
733
|
return
|
|
718
734
|
if dry_run:
|
|
@@ -723,7 +739,10 @@ def _ensure_roll_pending_marker(
|
|
|
723
739
|
)
|
|
724
740
|
return
|
|
725
741
|
write_roll_pending(
|
|
726
|
-
RollPending(
|
|
742
|
+
RollPending(
|
|
743
|
+
target_version=target_version, set_at=_time.time(), reason=reason,
|
|
744
|
+
min_releases_behind=min_releases_behind,
|
|
745
|
+
)
|
|
727
746
|
)
|
|
728
747
|
|
|
729
748
|
|
|
@@ -1123,7 +1142,14 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
1123
1142
|
# too, so a plain periodic `coord-release-propagate.timer` run also
|
|
1124
1143
|
# arms the drive-queue tick's own inter-drive-gap trigger instead of
|
|
1125
1144
|
# requiring an operator to separately reach for `nightly-window`.
|
|
1126
|
-
|
|
1145
|
+
# #2870: stamp THIS run's own already-passed `effective_min_behind`
|
|
1146
|
+
# (resolved above, 3a) onto the marker, so whatever discharges it is
|
|
1147
|
+
# gated at the threshold that armed it, not a threshold re-resolved
|
|
1148
|
+
# from scratch later.
|
|
1149
|
+
_ensure_roll_pending_marker(
|
|
1150
|
+
record.target_version, reason="propagate",
|
|
1151
|
+
min_releases_behind=effective_min_behind, dry_run=dry_run,
|
|
1152
|
+
)
|
|
1127
1153
|
_finish(rp.STATUS_DEFERRED, 0)
|
|
1128
1154
|
|
|
1129
1155
|
still_busy = busy_hosts - set(current)
|
|
@@ -2846,7 +2872,7 @@ def _latest_propagate_record_since(state_dir: Path, since: float) -> dict | None
|
|
|
2846
2872
|
|
|
2847
2873
|
def _run_propagate(
|
|
2848
2874
|
*, daemon_host: str, target_version: str, config_path: Path, state_dir: Path,
|
|
2849
|
-
runner=None, now_fn=None,
|
|
2875
|
+
min_behind: int | None = None, runner=None, now_fn=None,
|
|
2850
2876
|
) -> tuple[str, int, str, float | None]:
|
|
2851
2877
|
"""``coord release propagate --daemon-host ... --target ... --json``.
|
|
2852
2878
|
|
|
@@ -2858,6 +2884,20 @@ def _run_propagate(
|
|
|
2858
2884
|
run decided was needed is the version that actually rolls, even if a new
|
|
2859
2885
|
release lands on PyPI mid-drain.
|
|
2860
2886
|
|
|
2887
|
+
#2870: *min_behind*, when given, is passed through as `--min-behind` —
|
|
2888
|
+
the threshold the roll-pending marker being discharged here was ARMED
|
|
2889
|
+
at (`RollPending.min_releases_behind`), NOT this process's own
|
|
2890
|
+
`propagation.min_releases_behind`. Before this, this call never passed
|
|
2891
|
+
`--min-behind` at all, so `coord release propagate` always re-resolved
|
|
2892
|
+
ITS OWN threshold from `coordinator.yml` — a marker armed below the
|
|
2893
|
+
fleet default (e.g. `coord release nightly-window --min-behind 1`
|
|
2894
|
+
against a fleet configured `min_releases_behind: 5`) could never reach
|
|
2895
|
+
the threshold ITS discharge required and held forever, `alert: (none)`
|
|
2896
|
+
the whole time. ``None`` (an old marker with no recorded threshold, or
|
|
2897
|
+
one whose arming run never evaluated the gate) omits the flag, matching
|
|
2898
|
+
the pre-#2870 behaviour — this process resolves its own default exactly
|
|
2899
|
+
as it always did.
|
|
2900
|
+
|
|
2861
2901
|
Returns ``(status, exit_code, combined_output, propagate_started_at)``.
|
|
2862
2902
|
``status`` is read from the propagation journal entry that run itself
|
|
2863
2903
|
wrote (:func:`_latest_propagate_record_since`) — the same ground truth
|
|
@@ -2883,6 +2923,8 @@ def _run_propagate(
|
|
|
2883
2923
|
"--daemon-host", daemon_host, "--target", target_version,
|
|
2884
2924
|
"--json", "--config", str(config_path),
|
|
2885
2925
|
]
|
|
2926
|
+
if min_behind is not None:
|
|
2927
|
+
argv.extend(["--min-behind", str(min_behind)])
|
|
2886
2928
|
try:
|
|
2887
2929
|
proc = run(argv, capture_output=True, text=True, timeout=1800)
|
|
2888
2930
|
except Exception as exc: # noqa: BLE001
|
|
@@ -3224,9 +3266,24 @@ def release_nightly_window(
|
|
|
3224
3266
|
# attempt, safe to make redundantly since `coord release propagate`
|
|
3225
3267
|
# never carries `--force` here (trap 1) and simply defers again if
|
|
3226
3268
|
# the fleet is still busy.
|
|
3269
|
+
# #2870: gate the discharge at the threshold the marker was ARMED
|
|
3270
|
+
# at (`existing.min_releases_behind`), not whatever `coord release
|
|
3271
|
+
# propagate` would re-resolve on its own — that mismatch is exactly
|
|
3272
|
+
# how a marker armed via `--min-behind 1` froze the queue against a
|
|
3273
|
+
# fleet configured `min_releases_behind: 5`, forever holding at "3
|
|
3274
|
+
# behind, threshold 5" no matter how many times this fired. A
|
|
3275
|
+
# marker with no recorded threshold (written before this field
|
|
3276
|
+
# existed, or whose arming run never evaluated the gate at all)
|
|
3277
|
+
# falls back to THIS run's own `effective_min_behind` — the same
|
|
3278
|
+
# value it would have used before #2870.
|
|
3227
3279
|
prop_status, prop_exit, prop_output, prop_started_at = _run_propagate(
|
|
3228
3280
|
daemon_host=daemon_name, target_version=existing.target_version,
|
|
3229
3281
|
config_path=config_path, state_dir=state_dir,
|
|
3282
|
+
min_behind=(
|
|
3283
|
+
existing.min_releases_behind
|
|
3284
|
+
if existing.min_releases_behind is not None
|
|
3285
|
+
else effective_min_behind
|
|
3286
|
+
),
|
|
3230
3287
|
)
|
|
3231
3288
|
record.propagate_status = prop_status
|
|
3232
3289
|
record.propagate_exit_code = prop_exit
|
|
@@ -3303,6 +3360,13 @@ def release_nightly_window(
|
|
|
3303
3360
|
# re-arm — the queue froze because the bound that was supposed to save it
|
|
3304
3361
|
# could never be reached. Only a genuinely fresh marker (no existing one
|
|
3305
3362
|
# at all) gets a new clock.
|
|
3363
|
+
# #2870: every write below stamps `effective_min_behind` — THIS run's
|
|
3364
|
+
# own already-resolved threshold (section 2b above) — onto the marker,
|
|
3365
|
+
# so `_run_propagate`'s belt-and-braces call above (and any future
|
|
3366
|
+
# discharge) is gated at the SAME threshold that armed it, not whatever
|
|
3367
|
+
# `coord release propagate` would re-resolve on its own later. Updated
|
|
3368
|
+
# on every re-arm, same as `target_version`/`reason` just below — only
|
|
3369
|
+
# `set_at`/`deferrals` are the frozen "clock" #2607 protects.
|
|
3306
3370
|
if existing is not None:
|
|
3307
3371
|
click.echo(
|
|
3308
3372
|
f"replacing stale roll-pending marker ({existing.describe()}) "
|
|
@@ -3313,6 +3377,7 @@ def release_nightly_window(
|
|
|
3313
3377
|
write_roll_pending(
|
|
3314
3378
|
_dataclasses.replace(
|
|
3315
3379
|
existing, target_version=record.target_version, reason="nightly-window",
|
|
3380
|
+
min_releases_behind=effective_min_behind,
|
|
3316
3381
|
)
|
|
3317
3382
|
)
|
|
3318
3383
|
else:
|
|
@@ -3321,6 +3386,7 @@ def release_nightly_window(
|
|
|
3321
3386
|
target_version=record.target_version,
|
|
3322
3387
|
set_at=time.time(),
|
|
3323
3388
|
reason="nightly-window",
|
|
3389
|
+
min_releases_behind=effective_min_behind,
|
|
3324
3390
|
)
|
|
3325
3391
|
)
|
|
3326
3392
|
click.echo(
|
|
@@ -587,6 +587,14 @@ class Action:
|
|
|
587
587
|
# the work row's own last attempt reported, or `_decide_merge` would
|
|
588
588
|
# diagnose one PR using the other PR's gates.
|
|
589
589
|
merge_scope: str = "work"
|
|
590
|
+
# #2871: an explicit ``(event_type, summary, details)`` for `Driver._loop`
|
|
591
|
+
# to write via `_record_drive_audit`, independent of whatever this Action
|
|
592
|
+
# otherwise does (WAIT/RUN/EXIT). `decide()` stays a pure function of its
|
|
593
|
+
# inputs — it hands back *what happened*, never writes the audit log
|
|
594
|
+
# itself — while still letting a poll that neither dispatches nor exits
|
|
595
|
+
# (e.g. bypassing a stale pre-dispatch refusal) leave a durable trail
|
|
596
|
+
# instead of only a run-log line nobody queries later.
|
|
597
|
+
audit_event: tuple[str, str, dict[str, Any]] | None = None
|
|
590
598
|
|
|
591
599
|
@property
|
|
592
600
|
def is_exit(self) -> bool:
|
|
@@ -605,6 +613,44 @@ def _die(message: str, exit_code: int = EXIT_TERMINAL_FAILURE) -> Action:
|
|
|
605
613
|
return Action(kind=EXIT, message=message, exit_code=exit_code)
|
|
606
614
|
|
|
607
615
|
|
|
616
|
+
def _format_age(seconds: float) -> str:
|
|
617
|
+
"""Coarse human age ('38m', '15h', '1.2d') for a pre-dispatch audit note.
|
|
618
|
+
|
|
619
|
+
Deliberately not the CLI's full relative-time renderer — this is one
|
|
620
|
+
field inside an audit `summary`/`details`, not a UI surface, so a small
|
|
621
|
+
self-contained formatter is enough (#2871).
|
|
622
|
+
"""
|
|
623
|
+
seconds = max(0.0, seconds)
|
|
624
|
+
if seconds < 3600:
|
|
625
|
+
return f"{int(seconds // 60)}m"
|
|
626
|
+
if seconds < 86400:
|
|
627
|
+
return f"{seconds / 3600:.0f}h"
|
|
628
|
+
return f"{seconds / 86400:.1f}d"
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
def _refused_policy_is_stale(state: IssueState) -> bool:
|
|
632
|
+
"""True when a terminal ``refused_policy`` work row no longer describes
|
|
633
|
+
the issue as it stands now (#2871).
|
|
634
|
+
|
|
635
|
+
A worker refuses pre-dispatch work exactly once, correctly, for the ask
|
|
636
|
+
it was shown — the refusal says nothing about a DIFFERENT ask on the same
|
|
637
|
+
issue number. If the issue was retargeted (title rewritten) after that
|
|
638
|
+
row finished, the branch it would have produced (workers name branches
|
|
639
|
+
``issue-{N}-{slugify(title)}`` at dispatch time, see
|
|
640
|
+
``coord.agent``'s ``branch_name`` construction) no longer matches what a
|
|
641
|
+
fresh dispatch would name — that mismatch is the signal a retarget
|
|
642
|
+
happened. Conservative on every uncertainty (no branch recorded, no
|
|
643
|
+
title resolved): returns ``False`` — i.e. still treated as blocking —
|
|
644
|
+
rather than risk waving a genuinely-unresolved refusal through.
|
|
645
|
+
"""
|
|
646
|
+
if not state.work_branch or not state.issue_title:
|
|
647
|
+
return False
|
|
648
|
+
from coord.agent import _slugify # noqa: PLC0415
|
|
649
|
+
|
|
650
|
+
expected_branch = f"issue-{state.issue}-{_slugify(state.issue_title)}"
|
|
651
|
+
return state.work_branch != expected_branch
|
|
652
|
+
|
|
653
|
+
|
|
608
654
|
# ── oracle-loop JIT slice authoring (#1453) ─────────────────────────────────
|
|
609
655
|
|
|
610
656
|
|
|
@@ -2036,8 +2082,58 @@ def decide(
|
|
|
2036
2082
|
# deliverable was a doc edit, which CLAUDE.md itself tells a worker
|
|
2037
2083
|
# to refuse and stop rather than attempt). Unlike an ADVISORY 0-commit
|
|
2038
2084
|
# exit, retrying changes nothing — the rule this worker cited is not
|
|
2039
|
-
# going anywhere —
|
|
2040
|
-
#
|
|
2085
|
+
# going anywhere — UNLESS the issue itself has since changed.
|
|
2086
|
+
#
|
|
2087
|
+
# #2871: a refusal is a verdict on the ASK the worker was shown, not
|
|
2088
|
+
# a standing veto on the issue NUMBER forever. `coord/claim.py`'s
|
|
2089
|
+
# `find_work_claim` never even sees this row (it's terminal, so it
|
|
2090
|
+
# lives in `board.completed`) — the reason a stale refusal blocks
|
|
2091
|
+
# every later drive is entirely HERE: `work_aid`/`work_status` above
|
|
2092
|
+
# are the latest work-like row for this issue regardless of how old
|
|
2093
|
+
# or how differently-scoped it is, so a fresh `coord drive` launch
|
|
2094
|
+
# reads the fossil row as "this run's" state before ever reaching
|
|
2095
|
+
# `_dispatch_work_stage`. If the issue was retargeted (title
|
|
2096
|
+
# rewritten) after this row finished, `_refused_policy_is_stale`
|
|
2097
|
+
# detects it — the old refusal no longer describes what a fresh
|
|
2098
|
+
# dispatch would even be asked to do — and this bypasses the veto
|
|
2099
|
+
# instead of dying again on the SAME prose a fresh worker never
|
|
2100
|
+
# produced this run (CC#916).
|
|
2101
|
+
age_seconds = (
|
|
2102
|
+
time.time() - state.work_finished_at
|
|
2103
|
+
if state.work_finished_at is not None
|
|
2104
|
+
else None
|
|
2105
|
+
)
|
|
2106
|
+
age = _format_age(age_seconds) if age_seconds is not None else "unknown age"
|
|
2107
|
+
if _refused_policy_is_stale(state):
|
|
2108
|
+
bypass_summary = (
|
|
2109
|
+
f"pre-dispatch: bypassing stale refused_policy assignment "
|
|
2110
|
+
f"{state.work_aid} ({age} old) on issue {state.repo}#{state.issue} "
|
|
2111
|
+
f"— retargeted since (branch {state.work_branch!r} no longer "
|
|
2112
|
+
"matches the issue's current title); dispatching fresh work (#2871)"
|
|
2113
|
+
)
|
|
2114
|
+
dispatch = _dispatch_work_stage(
|
|
2115
|
+
state, opts, counters, machine, oracle, gate_checker, verifier
|
|
2116
|
+
)
|
|
2117
|
+
return replace(
|
|
2118
|
+
dispatch,
|
|
2119
|
+
audit_event=(
|
|
2120
|
+
"refused_policy_stale",
|
|
2121
|
+
bypass_summary,
|
|
2122
|
+
{
|
|
2123
|
+
"stale_assignment_id": state.work_aid,
|
|
2124
|
+
"stale_branch": state.work_branch,
|
|
2125
|
+
"age_seconds": age_seconds,
|
|
2126
|
+
},
|
|
2127
|
+
),
|
|
2128
|
+
)
|
|
2129
|
+
# Still genuinely blocking: `_die()` exactly like every other
|
|
2130
|
+
# terminal branch here, but the message now says explicitly that
|
|
2131
|
+
# THIS run refused pre-dispatch on an OLD row (naming it and its
|
|
2132
|
+
# age) rather than reading as a fresh worker refusing again — and
|
|
2133
|
+
# names the remedy that actually clears it (#2871: retargeting is
|
|
2134
|
+
# what makes the branch above fire on the next drive; `coord
|
|
2135
|
+
# drive-queue remove`+`add` alone does nothing, since the queue row
|
|
2136
|
+
# was never what was blocking). The message still embeds
|
|
2041
2137
|
# `POLICY_REFUSAL_MARKER`: `coord/drive_queue.py`'s
|
|
2042
2138
|
# `_reconcile_running` recognises that marker in this run's own
|
|
2043
2139
|
# `drive_exited` audit summary and parks the queue entry
|
|
@@ -2046,12 +2142,16 @@ def decide(
|
|
|
2046
2142
|
# principle #1844 already applies pre-dispatch, applied here
|
|
2047
2143
|
# post-dispatch.
|
|
2048
2144
|
return _die(
|
|
2049
|
-
f"
|
|
2050
|
-
"
|
|
2051
|
-
"
|
|
2052
|
-
"
|
|
2053
|
-
|
|
2054
|
-
|
|
2145
|
+
f"pre-dispatch refusal on assignment {state.work_aid} "
|
|
2146
|
+
f"(refused_policy, {age} old) — work refused on a standing "
|
|
2147
|
+
"repo-rule prohibition rather than doing the dispatched work; "
|
|
2148
|
+
"the worker did the CORRECT thing (#2234). Needs the "
|
|
2149
|
+
"coordinator: do the work directly, OR retarget the issue "
|
|
2150
|
+
"(rewrite its title so the deliverable matches what should "
|
|
2151
|
+
"actually be dispatched) — the next `coord drive` detects the "
|
|
2152
|
+
"retarget and dispatches fresh work automatically (#2871), so "
|
|
2153
|
+
f"`coord drive-queue remove {state.repo} {state.issue}` + `add` "
|
|
2154
|
+
"then genuinely clears this once the issue is retargeted.\n"
|
|
2055
2155
|
f" inspect: coord log {state.work_aid} --machine "
|
|
2056
2156
|
f"{state.work_machine or machine}\n"
|
|
2057
2157
|
f" {POLICY_REFUSAL_MARKER}"
|
|
@@ -4680,6 +4780,15 @@ class Driver:
|
|
|
4680
4780
|
for warning in action.warnings:
|
|
4681
4781
|
self.warn(warning)
|
|
4682
4782
|
|
|
4783
|
+
# #2871: `decide()` stays a pure function of its inputs — it
|
|
4784
|
+
# cannot write the audit log itself — so an Action that carries
|
|
4785
|
+
# its own audit note (e.g. bypassing a stale pre-dispatch
|
|
4786
|
+
# refusal) gets recorded here, the one place this loop already
|
|
4787
|
+
# writes durable `drive_*` audit rows.
|
|
4788
|
+
if action.audit_event is not None:
|
|
4789
|
+
event_type, summary, details = action.audit_event
|
|
4790
|
+
self._record_drive_audit(event_type, summary, details=details)
|
|
4791
|
+
|
|
4683
4792
|
# #2443: self-heal — see `_self_heal_drift_message`. Tracked off
|
|
4684
4793
|
# the Action's own `label`, NOT `fingerprint` above: a WAIT can
|
|
4685
4794
|
# (and, in the #2286 shape, does) repeat the identical reason
|
|
@@ -1561,6 +1561,26 @@ class RollPending:
|
|
|
1561
1561
|
#: fleet still busy — bumped by the shell each tick it does NOT fire the
|
|
1562
1562
|
#: roll. Never bumped by `plan_tick` itself (pure; no counting state).
|
|
1563
1563
|
deferrals: int = 0
|
|
1564
|
+
#: #2870: the ``propagation.min_releases_behind``/``--min-behind``
|
|
1565
|
+
#: threshold this marker was ARMED at — `coord release nightly-window`/
|
|
1566
|
+
#: `coord.commands.release._ensure_roll_pending_marker` stamp the
|
|
1567
|
+
#: effective threshold THEIR OWN run resolved (override, else
|
|
1568
|
+
#: `coordinator.yml`, else 1) at the moment they write this marker.
|
|
1569
|
+
#: Before #2870, discharge (`_run_propagate`'s `coord release propagate`
|
|
1570
|
+
#: subprocess) always re-resolved its OWN threshold from scratch — the
|
|
1571
|
+
#: fleet default, never whatever `--min-behind` armed this marker at —
|
|
1572
|
+
#: so a marker armed below the fleet default (e.g. a
|
|
1573
|
+
#: `coord-release-window.service` ExecStart carrying `--min-behind 1`
|
|
1574
|
+
#: against a fleet configured `min_releases_behind: 5`) could never
|
|
1575
|
+
#: reach the threshold its own discharge path required and froze the
|
|
1576
|
+
#: queue forever. Carried through to `_run_propagate` as `--min-behind`
|
|
1577
|
+
#: so discharge is gated at the SAME threshold arm used. `None` for a
|
|
1578
|
+
#: marker written before this field existed (`from_dict`'s tolerant
|
|
1579
|
+
#: parse) or one whose arming run never evaluated the gate at all
|
|
1580
|
+
#: (`effective_min_behind <= 1`) — the discharge call then falls back to
|
|
1581
|
+
#: ITS OWN effective threshold, matching the pre-#2870 behaviour rather
|
|
1582
|
+
#: than guessing.
|
|
1583
|
+
min_releases_behind: int | None = None
|
|
1564
1584
|
|
|
1565
1585
|
def expired(self, now: float) -> bool:
|
|
1566
1586
|
"""Has this marker outlived ITS OWN bound — TTL or deferral ceiling?
|
|
@@ -1589,6 +1609,7 @@ class RollPending:
|
|
|
1589
1609
|
"ttl_seconds": self.ttl_seconds,
|
|
1590
1610
|
"max_deferrals": self.max_deferrals,
|
|
1591
1611
|
"deferrals": self.deferrals,
|
|
1612
|
+
"min_releases_behind": self.min_releases_behind,
|
|
1592
1613
|
}
|
|
1593
1614
|
|
|
1594
1615
|
@classmethod
|
|
@@ -1615,6 +1636,7 @@ class RollPending:
|
|
|
1615
1636
|
data.get("max_deferrals"), ROLL_PENDING_DEFAULT_MAX_DEFERRALS
|
|
1616
1637
|
),
|
|
1617
1638
|
deferrals=_as_int_default(data.get("deferrals"), 0),
|
|
1639
|
+
min_releases_behind=_as_optional_int(data.get("min_releases_behind")),
|
|
1618
1640
|
)
|
|
1619
1641
|
|
|
1620
1642
|
|
|
@@ -1632,6 +1654,21 @@ def _as_int_default(value: Any, default: int) -> int:
|
|
|
1632
1654
|
return default
|
|
1633
1655
|
|
|
1634
1656
|
|
|
1657
|
+
def _as_optional_int(value: Any) -> int | None:
|
|
1658
|
+
"""Tolerant parse for a field that is legitimately absent (``None``),
|
|
1659
|
+
unlike :func:`_as_int_default`'s fields which always have a real
|
|
1660
|
+
fallback — see `RollPending.min_releases_behind`'s own docstring for why
|
|
1661
|
+
"not recorded" must stay `None` rather than silently becoming some
|
|
1662
|
+
default int a caller could mistake for a real threshold.
|
|
1663
|
+
"""
|
|
1664
|
+
if value is None:
|
|
1665
|
+
return None
|
|
1666
|
+
try:
|
|
1667
|
+
return int(value)
|
|
1668
|
+
except (TypeError, ValueError):
|
|
1669
|
+
return None
|
|
1670
|
+
|
|
1671
|
+
|
|
1635
1672
|
@dataclass(frozen=True)
|
|
1636
1673
|
class TickPlan:
|
|
1637
1674
|
"""Everything one tick decided, and nothing it has done yet."""
|
|
@@ -3107,18 +3144,32 @@ def _reconcile_running(
|
|
|
3107
3144
|
# _decide` marks a `refused_policy` work row with `POLICY_REFUSAL_
|
|
3108
3145
|
# MARKER` (coord.models) rather than `EXIT_DISPATCH_REFUSED`, so this is
|
|
3109
3146
|
# checked purely off `own_reason` text, independent of `exit_refused`.
|
|
3110
|
-
# Unlike #2063 this
|
|
3111
|
-
# STANDING rule, not a pending verdict — so it
|
|
3112
|
-
# the "queue resumes it automatically" wording
|
|
3113
|
-
# `plan_tick`'s pre-pass below, which recognises
|
|
3114
|
-
# leaves the entry parked rather than falling
|
|
3115
|
-
# auto-resume.
|
|
3116
|
-
#
|
|
3147
|
+
# Unlike #2063 this does not self-clear on its own timer — a policy
|
|
3148
|
+
# refusal names a STANDING rule, not a pending verdict — so it
|
|
3149
|
+
# deliberately does not get the "queue resumes it automatically" wording
|
|
3150
|
+
# Gate-A's park does; see `plan_tick`'s pre-pass below, which recognises
|
|
3151
|
+
# this same marker and leaves the entry parked rather than falling
|
|
3152
|
+
# through to the CI-park auto-resume.
|
|
3153
|
+
#
|
|
3154
|
+
# #2871: the precondition IS an operator action, but it is a RETARGET
|
|
3155
|
+
# (rewrite the issue so its deliverable isn't the coordinator-only thing
|
|
3156
|
+
# that got refused), not queue surgery. Before #2871, `coord.drive.
|
|
3157
|
+
# decide()` re-read the SAME stale `refused_policy` row on every relaunch
|
|
3158
|
+
# regardless of what the issue said by then, so `remove`+`add` looked
|
|
3159
|
+
# like the fix but did nothing — a fresh queue row, same blocking
|
|
3160
|
+
# assignment. `decide()` now compares that row's branch against the
|
|
3161
|
+
# issue's CURRENT title-derived slug (`_refused_policy_is_stale`) and
|
|
3162
|
+
# bypasses a stale refusal instead of dying on it again, so `remove`+
|
|
3163
|
+
# `add` (or any later relaunch) genuinely works — but only once the
|
|
3164
|
+
# retarget has actually happened.
|
|
3117
3165
|
if own_reason and is_policy_refusal_reason(own_reason):
|
|
3118
3166
|
reason = (
|
|
3119
3167
|
f"{own_reason} — parking without spending an attempt (#2234); "
|
|
3120
|
-
"needs the coordinator, not a relaunch —
|
|
3121
|
-
"
|
|
3168
|
+
"needs the coordinator, not a relaunch — retarget the issue "
|
|
3169
|
+
"(rewrite its title so the deliverable isn't coordinator-only), "
|
|
3170
|
+
"then `coord drive-queue remove`+`add` (or just relaunch "
|
|
3171
|
+
"`coord drive`) — it now detects the retarget and dispatches "
|
|
3172
|
+
"fresh work automatically (#2871)"
|
|
3122
3173
|
)
|
|
3123
3174
|
return (
|
|
3124
3175
|
Reconcile(
|