code-coordinator 0.5.232__tar.gz → 0.5.234__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.232 → code_coordinator-0.5.234}/PKG-INFO +1 -1
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/code_coordinator.egg-info/SOURCES.txt +3 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/code_coordinator.egg-info/scm_file_list.json +3 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/drive_queue.py +407 -12
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/release.py +226 -166
- code_coordinator-0.5.234/coord/deploy/coord-release-window.service +157 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234/coord}/deploy/coord-release-window.timer +11 -8
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/drive_queue.py +213 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notify.py +85 -15
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/release_window.py +33 -1
- code_coordinator-0.5.234/deploy/coord-release-window.service +157 -0
- {code_coordinator-0.5.232/coord → code_coordinator-0.5.234}/deploy/coord-release-window.timer +11 -8
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/AGENT_OPERATIONS.md +106 -8
- code_coordinator-0.5.234/tests/acceptance/ms-67/manifest.d/2533.yml +64 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-67/manifest.yml +7 -3
- code_coordinator-0.5.234/tests/acceptance/ms-67/pull_decomposition_2533.rs +487 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/conftest.py +21 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_release_propagate.py +54 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_release_window.py +230 -211
- code_coordinator-0.5.234/tests/test_release_roll_window_handoff.py +795 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_release_window.py +6 -1
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/tests/acceptance.rs +1 -0
- code_coordinator-0.5.232/coord/deploy/coord-release-window.service +0 -119
- code_coordinator-0.5.232/deploy/coord-release-window.service +0 -119
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/.gitignore +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/CLAUDE.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/GOAL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/LICENSE +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/MANIFEST.in +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/README.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/__init__.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/agent.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/audit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/block_log.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/board_service.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/brain.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/claim.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/cli.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/client.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/comments.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/config.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/dao.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/db.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/deps.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/drive.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/events.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/filelock.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/freshness.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/gates.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/goal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/context.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/models.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/render.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/health/units.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/hooks.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/interactive.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/models.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/network.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/openapi.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/parentage.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/plans.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/progress.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/reports.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/review.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/self_health.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/smoke.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/split_work.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/state.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/test_author.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/test_report.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/usage.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/install-agent.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/pyproject.toml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/setup.cfg +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/__init__.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_config.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_db.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_events.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_init.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_models.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_network.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_review.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_session.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_split.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_state.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.232 → code_coordinator-0.5.234}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -621,6 +621,7 @@ tests/test_release_cordon_daemon_leads_2176.py
|
|
|
621
621
|
tests/test_release_cordon_deadlock_2240.py
|
|
622
622
|
tests/test_release_cordon_stuck_2490.py
|
|
623
623
|
tests/test_release_propagate.py
|
|
624
|
+
tests/test_release_roll_window_handoff.py
|
|
624
625
|
tests/test_release_unified_1242.py
|
|
625
626
|
tests/test_release_verify.py
|
|
626
627
|
tests/test_release_window.py
|
|
@@ -741,6 +742,8 @@ tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen
|
|
|
741
742
|
tests/acceptance/ms-67/approved_items_2532.rs
|
|
742
743
|
tests/acceptance/ms-67/contract.md
|
|
743
744
|
tests/acceptance/ms-67/manifest.yml
|
|
745
|
+
tests/acceptance/ms-67/pull_decomposition_2533.rs
|
|
746
|
+
tests/acceptance/ms-67/manifest.d/2533.yml
|
|
744
747
|
tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen
|
|
745
748
|
tests/acceptance/ms-67/mocks/approved-items-context-menu.screen
|
|
746
749
|
tests/acceptance/ms-67/mocks/approved-items-detail.screen
|
{code_coordinator-0.5.232 → code_coordinator-0.5.234}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -380,12 +380,14 @@
|
|
|
380
380
|
"tests/acceptance/ms-65/tabs_persistence_2286.rs",
|
|
381
381
|
"tests/acceptance/ms-67/approved_items_2532.rs",
|
|
382
382
|
"tests/acceptance/ms-67/contract.md",
|
|
383
|
+
"tests/acceptance/ms-67/manifest.d/2533.yml",
|
|
383
384
|
"tests/acceptance/ms-67/manifest.yml",
|
|
384
385
|
"tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen",
|
|
385
386
|
"tests/acceptance/ms-67/mocks/approved-items-context-menu.screen",
|
|
386
387
|
"tests/acceptance/ms-67/mocks/approved-items-detail.screen",
|
|
387
388
|
"tests/acceptance/ms-67/mocks/approved-items-empty.screen",
|
|
388
389
|
"tests/acceptance/ms-67/mocks/approved-items-populated.screen",
|
|
390
|
+
"tests/acceptance/ms-67/pull_decomposition_2533.rs",
|
|
389
391
|
"tests/acceptance/ms-example/mocks/home-active.html",
|
|
390
392
|
"tests/conftest.py",
|
|
391
393
|
"tests/fixtures/board-pipeline-basic.json",
|
|
@@ -691,6 +693,7 @@
|
|
|
691
693
|
"tests/test_release_cordon_deadlock_2240.py",
|
|
692
694
|
"tests/test_release_cordon_stuck_2490.py",
|
|
693
695
|
"tests/test_release_propagate.py",
|
|
696
|
+
"tests/test_release_roll_window_handoff.py",
|
|
694
697
|
"tests/test_release_unified_1242.py",
|
|
695
698
|
"tests/test_release_verify.py",
|
|
696
699
|
"tests/test_release_window.py",
|
|
@@ -52,6 +52,8 @@ from coord.drive_queue import (
|
|
|
52
52
|
QUEUE_ALERT_REPO,
|
|
53
53
|
QUEUE_ALERT_STAGE,
|
|
54
54
|
RESUME_PROBE_TIMEOUT_SECONDS,
|
|
55
|
+
ROLL_PENDING_DEFAULT_MAX_DEFERRALS,
|
|
56
|
+
ROLL_PENDING_DEFAULT_TTL_SECONDS,
|
|
55
57
|
STATE_BLOCKED,
|
|
56
58
|
STATE_DONE,
|
|
57
59
|
STATE_FAILED,
|
|
@@ -63,6 +65,7 @@ from coord.drive_queue import (
|
|
|
63
65
|
ProbeResult,
|
|
64
66
|
QueueEntry,
|
|
65
67
|
QueueError,
|
|
68
|
+
RollPending,
|
|
66
69
|
TickPlan,
|
|
67
70
|
build_board_view,
|
|
68
71
|
diagnose_blocked_after,
|
|
@@ -1034,6 +1037,11 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
|
|
|
1034
1037
|
counts = _counts(rows)
|
|
1035
1038
|
alert = _queue_alert()
|
|
1036
1039
|
held = fired_holds(entries_from_rows(rows))
|
|
1040
|
+
# #2587: read directly from the marker file, not from the last tick's
|
|
1041
|
+
# `TickPlan` — `status` may run between ticks (or on a machine that never
|
|
1042
|
+
# ticks at all), and the marker's own `deferrals`/TTL are exactly what an
|
|
1043
|
+
# operator needs to see this is a DELIBERATE hold, not a stalled queue.
|
|
1044
|
+
roll_pending = read_roll_pending()
|
|
1037
1045
|
|
|
1038
1046
|
if output_json:
|
|
1039
1047
|
click.echo(
|
|
@@ -1057,6 +1065,9 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
|
|
|
1057
1065
|
}
|
|
1058
1066
|
for e in held
|
|
1059
1067
|
],
|
|
1068
|
+
"roll_pending": (
|
|
1069
|
+
roll_pending.to_dict() if roll_pending is not None else None
|
|
1070
|
+
),
|
|
1060
1071
|
}
|
|
1061
1072
|
)
|
|
1062
1073
|
)
|
|
@@ -1078,6 +1089,19 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
|
|
|
1078
1089
|
for line in _hold_lines(entry):
|
|
1079
1090
|
click.echo(line)
|
|
1080
1091
|
click.echo(" release with: coord drive-queue resume")
|
|
1092
|
+
if roll_pending is not None:
|
|
1093
|
+
# #2587: deliberately its OWN line, not folded into `alert:` below —
|
|
1094
|
+
# this is a benign, self-clearing, EXPECTED state ("the fleet is
|
|
1095
|
+
# about to upgrade itself"), not an anomaly needing operator action,
|
|
1096
|
+
# and #2587 is explicit that a held-for-a-roll queue must never read
|
|
1097
|
+
# as broken.
|
|
1098
|
+
age = max(0.0, time.time() - roll_pending.set_at)
|
|
1099
|
+
click.echo(
|
|
1100
|
+
f"{roll_pending.describe()} — set {age:.0f}s ago, "
|
|
1101
|
+
f"{roll_pending.deferrals}/{roll_pending.max_deferrals} deferrals, "
|
|
1102
|
+
f"launches nothing until the queue empties out or "
|
|
1103
|
+
f"{max(0.0, roll_pending.ttl_seconds - age):.0f}s pass"
|
|
1104
|
+
)
|
|
1081
1105
|
if alert is not None:
|
|
1082
1106
|
click.echo(f"alert: {alert.get('reason') or ''}")
|
|
1083
1107
|
for detail in (alert.get("gate_readings") or "").split(" | "):
|
|
@@ -1872,6 +1896,228 @@ def _fetch_editable_drift() -> tuple[str, str] | None:
|
|
|
1872
1896
|
return (str(repo_root), shown)
|
|
1873
1897
|
|
|
1874
1898
|
|
|
1899
|
+
# ── #2587: roll-pending marker store ──────────────────────────────────────────
|
|
1900
|
+
#
|
|
1901
|
+
# A plain JSON file, not a `board_meta` DB row: every reader/writer —
|
|
1902
|
+
# `coord release propagate` / `coord release nightly-window`
|
|
1903
|
+
# (`coord/commands/release.py`), this module's own `tick`, and `coord notify`
|
|
1904
|
+
# (`coord/notify.py`) — runs ONLY on the daemon host in production
|
|
1905
|
+
# (`deploy/coord-release-window.service`'s and `deploy/coord-notify.service`'s
|
|
1906
|
+
# own headers both say so: `coord-drive-queue.timer`/`coord.db` exist there and
|
|
1907
|
+
# nowhere else). There is therefore exactly one process family ever touching
|
|
1908
|
+
# this file, on exactly one machine, and no daemon-routing/thin-client seam
|
|
1909
|
+
# (`coord.board_service`) to plug into — the same reasoning
|
|
1910
|
+
# `coord.machine_pause`'s local pause/cordon store predates its own daemon-aware
|
|
1911
|
+
# half. Kept a standalone file (mirroring `coord.machine_pause`'s
|
|
1912
|
+
# `paused_machines.json`) rather than a new `board_meta` key: unlike a cordon or
|
|
1913
|
+
# a milestone drain, at most one roll is ever pending at a time, so there is no
|
|
1914
|
+
# list to keep, and it lets `coord release propagate`/`nightly-window` set this
|
|
1915
|
+
# marker without importing `coord.state`'s DB machinery at all.
|
|
1916
|
+
_ROLL_PENDING_FILENAME = "roll_pending.json"
|
|
1917
|
+
|
|
1918
|
+
|
|
1919
|
+
def roll_pending_path() -> Path:
|
|
1920
|
+
"""Absolute path to the roll-pending marker file.
|
|
1921
|
+
|
|
1922
|
+
``$COORD_ROLL_PENDING_STATE`` overrides it — the same seam
|
|
1923
|
+
``coord.notifier.store.state_path`` uses, so a test redirects this store
|
|
1924
|
+
with one env var rather than monkeypatching a private function
|
|
1925
|
+
(``_no_real_pause_store``'s (#2101) heavier-weight approach, from before
|
|
1926
|
+
this seam existed). Never let a test write the OPERATOR'S real
|
|
1927
|
+
``~/.coord/roll_pending.json`` — a state file a test *can* write is a
|
|
1928
|
+
state file a test *will* write, and this one gates whether the daemon
|
|
1929
|
+
host's drive queue launches anything at all.
|
|
1930
|
+
"""
|
|
1931
|
+
import os # noqa: PLC0415
|
|
1932
|
+
|
|
1933
|
+
from coord.platform_paths import default_coord_dir # noqa: PLC0415
|
|
1934
|
+
|
|
1935
|
+
override = os.environ.get("COORD_ROLL_PENDING_STATE")
|
|
1936
|
+
if override:
|
|
1937
|
+
return Path(override).expanduser()
|
|
1938
|
+
return default_coord_dir() / _ROLL_PENDING_FILENAME
|
|
1939
|
+
|
|
1940
|
+
|
|
1941
|
+
def read_roll_pending() -> RollPending | None:
|
|
1942
|
+
"""The current marker, or ``None`` when no roll is pending.
|
|
1943
|
+
|
|
1944
|
+
Fail-soft on a missing/corrupt/hand-edited file — same posture
|
|
1945
|
+
:func:`_fetch_cordons` takes on an unreadable cordon store, and for the
|
|
1946
|
+
same reason: a marker this read cannot make sense of must read as "no
|
|
1947
|
+
roll pending" (resume launching), never as a reason to stop the tick.
|
|
1948
|
+
"""
|
|
1949
|
+
path = roll_pending_path()
|
|
1950
|
+
try:
|
|
1951
|
+
raw = path.read_text(encoding="utf-8")
|
|
1952
|
+
except FileNotFoundError:
|
|
1953
|
+
return None
|
|
1954
|
+
except OSError as exc:
|
|
1955
|
+
click.echo(
|
|
1956
|
+
f"warning: could not read {path} ({exc}) — treating no roll as pending",
|
|
1957
|
+
err=True,
|
|
1958
|
+
)
|
|
1959
|
+
return None
|
|
1960
|
+
if not raw.strip():
|
|
1961
|
+
return None
|
|
1962
|
+
try:
|
|
1963
|
+
data = _json.loads(raw)
|
|
1964
|
+
except ValueError:
|
|
1965
|
+
click.echo(f"warning: {path} is not valid JSON — ignoring it", err=True)
|
|
1966
|
+
return None
|
|
1967
|
+
if not isinstance(data, dict) or not data:
|
|
1968
|
+
return None
|
|
1969
|
+
try:
|
|
1970
|
+
return RollPending.from_dict(data)
|
|
1971
|
+
except ValueError as exc:
|
|
1972
|
+
click.echo(f"warning: {path} is not a usable roll-pending record ({exc})", err=True)
|
|
1973
|
+
return None
|
|
1974
|
+
|
|
1975
|
+
|
|
1976
|
+
def write_roll_pending(pending: RollPending) -> None:
|
|
1977
|
+
"""Persist *pending*, overwriting whatever was there before.
|
|
1978
|
+
|
|
1979
|
+
Used both for the INITIAL set (`coord release propagate`/
|
|
1980
|
+
`nightly-window`) and for this module's own re-write after bumping
|
|
1981
|
+
``deferrals`` each tick it does not fire the roll.
|
|
1982
|
+
|
|
1983
|
+
Atomic tempfile-then-rename — the same pattern
|
|
1984
|
+
`coord.machine_pause._save_state` uses for its own shared JSON state
|
|
1985
|
+
file. This one has THREE independent process families writing it (this
|
|
1986
|
+
module's own tick, and `coord release propagate`/`nightly-window`) with
|
|
1987
|
+
no cross-process lock between them (#2587 review) — a plain
|
|
1988
|
+
``write_text`` is a real torn-read window a concurrent
|
|
1989
|
+
:func:`read_roll_pending` could land in, even though that reader's
|
|
1990
|
+
fail-soft parse degrades a torn read to "no marker" rather than raising.
|
|
1991
|
+
"""
|
|
1992
|
+
import os # noqa: PLC0415
|
|
1993
|
+
import tempfile # noqa: PLC0415
|
|
1994
|
+
|
|
1995
|
+
path = roll_pending_path()
|
|
1996
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
1997
|
+
payload = _json.dumps(pending.to_dict(), sort_keys=True)
|
|
1998
|
+
fd, tmp_name = tempfile.mkstemp(prefix=".roll_pending.", suffix=".tmp", dir=path.parent)
|
|
1999
|
+
try:
|
|
2000
|
+
with os.fdopen(fd, "w", encoding="utf-8") as fh:
|
|
2001
|
+
fh.write(payload)
|
|
2002
|
+
os.replace(tmp_name, path)
|
|
2003
|
+
except Exception:
|
|
2004
|
+
try:
|
|
2005
|
+
os.unlink(tmp_name)
|
|
2006
|
+
except OSError:
|
|
2007
|
+
pass
|
|
2008
|
+
raise
|
|
2009
|
+
|
|
2010
|
+
|
|
2011
|
+
def clear_roll_pending() -> None:
|
|
2012
|
+
"""Drop the marker. A no-op (not an error) when nothing was pending."""
|
|
2013
|
+
path = roll_pending_path()
|
|
2014
|
+
try:
|
|
2015
|
+
path.unlink()
|
|
2016
|
+
except FileNotFoundError:
|
|
2017
|
+
pass
|
|
2018
|
+
|
|
2019
|
+
|
|
2020
|
+
def _fire_pending_roll(*, dry_run: bool = False) -> tuple[bool, str]:
|
|
2021
|
+
"""Best-effort ``systemctl --user start --no-block
|
|
2022
|
+
coord-release-window.service`` (#2587 design point 3).
|
|
2023
|
+
|
|
2024
|
+
``--no-block`` (a.k.a. ``--job-mode=fail`` without ``--wait``, the
|
|
2025
|
+
systemctl default) is the whole point: this must return almost instantly
|
|
2026
|
+
and hand the actual roll off to a unit that outlives THIS tick's process
|
|
2027
|
+
tree, never a synchronous, in-process ``coord release propagate`` call —
|
|
2028
|
+
the roll swaps the venv the tick is executing from, so it must not be a
|
|
2029
|
+
child of the tick's own cgroup or share its lifetime. See
|
|
2030
|
+
``deploy/coord-release-window.service`` for what that unit actually does.
|
|
2031
|
+
|
|
2032
|
+
Returns ``(fired, detail)``, never raises — a `systemctl` this host
|
|
2033
|
+
cannot run (no systemd, PATH issue, unit not installed) must be a
|
|
2034
|
+
deferral the marker survives to retry next tick, not a crashed tick.
|
|
2035
|
+
"""
|
|
2036
|
+
if dry_run:
|
|
2037
|
+
return True, "--dry-run: would run `systemctl --user start --no-block coord-release-window.service`"
|
|
2038
|
+
try:
|
|
2039
|
+
proc = subprocess.run( # noqa: S603, S607 — fixed argv, no shell
|
|
2040
|
+
["systemctl", "--user", "start", "--no-block", "coord-release-window.service"],
|
|
2041
|
+
capture_output=True,
|
|
2042
|
+
text=True,
|
|
2043
|
+
timeout=30,
|
|
2044
|
+
)
|
|
2045
|
+
except (subprocess.SubprocessError, OSError) as exc:
|
|
2046
|
+
return False, f"{type(exc).__name__}: {exc}"
|
|
2047
|
+
if proc.returncode == 0:
|
|
2048
|
+
return True, "started coord-release-window.service"
|
|
2049
|
+
detail = (proc.stderr or proc.stdout or "").strip() or f"exit {proc.returncode}"
|
|
2050
|
+
return False, detail
|
|
2051
|
+
|
|
2052
|
+
|
|
2053
|
+
def _bump_roll_pending_deferral(pending: RollPending) -> RollPending:
|
|
2054
|
+
"""*pending* with ``deferrals`` incremented by one — every OTHER field
|
|
2055
|
+
(including ``set_at``, deliberately never refreshed) unchanged.
|
|
2056
|
+
|
|
2057
|
+
Called once per tick this marker survives without firing — the tick-count
|
|
2058
|
+
half of #2587's bound (see `ROLL_PENDING_DEFAULT_MAX_DEFERRALS`'s
|
|
2059
|
+
comment). `set_at` stays frozen at the ORIGINAL set time so the TTL half
|
|
2060
|
+
of the bound measures real wall-clock age, not "time since last bumped" —
|
|
2061
|
+
a marker re-armed every tick would otherwise never age out on the clock
|
|
2062
|
+
at all, defeating the whole point of having two independent bounds.
|
|
2063
|
+
"""
|
|
2064
|
+
import dataclasses as _dataclasses # noqa: PLC0415
|
|
2065
|
+
|
|
2066
|
+
return _dataclasses.replace(pending, deferrals=pending.deferrals + 1)
|
|
2067
|
+
|
|
2068
|
+
|
|
2069
|
+
#: #2587's own escalation key — deliberately NOT `QUEUE_ALERT_REPO`/
|
|
2070
|
+
#: `QUEUE_ALERT_ISSUE`: that single slot is overwritten (or cleared via
|
|
2071
|
+
#: `_clear_queue_alert()`) by THIS SAME tick's `plan.alert` handling further
|
|
2072
|
+
#: down, which would erase an expiry record the instant it was written (the
|
|
2073
|
+
#: marker is already cleared by the time that code runs, so `plan.alert` is
|
|
2074
|
+
#: back to whatever the rest of the tick decided). Mirrors
|
|
2075
|
+
#: `coord.commands.release`'s `WINDOW_ALERT_REPO`/`WINDOW_ALERT_ISSUE`/
|
|
2076
|
+
#: `WINDOW_ALERT_STAGE` — same shape, same reasoning, one escalation slot per
|
|
2077
|
+
#: independent "this must be loud" condition.
|
|
2078
|
+
ROLL_PENDING_ALERT_REPO = "(roll-pending)"
|
|
2079
|
+
ROLL_PENDING_ALERT_ISSUE = 0
|
|
2080
|
+
ROLL_PENDING_ALERT_STAGE = "roll-pending"
|
|
2081
|
+
|
|
2082
|
+
|
|
2083
|
+
def _escalate_roll_pending_expired(pending: RollPending, *, now: float) -> None:
|
|
2084
|
+
"""Surface an expired roll-pending marker loudly (#2587's own "never
|
|
2085
|
+
silently held" requirement — mirrors `coord.commands.release.
|
|
2086
|
+
_escalate_window`'s "a skipped/failed night must be loud" reasoning, one
|
|
2087
|
+
level up: here it is a roll that never got its window, not a night that
|
|
2088
|
+
never rolled).
|
|
2089
|
+
"""
|
|
2090
|
+
from coord.state import record_drive_escalation # noqa: PLC0415
|
|
2091
|
+
|
|
2092
|
+
age_seconds = max(0.0, now - pending.set_at)
|
|
2093
|
+
reason = (
|
|
2094
|
+
f"roll-pending for v{pending.target_version} expired without reaching "
|
|
2095
|
+
f"a quiescent window ({age_seconds:.0f}s elapsed / {pending.deferrals} "
|
|
2096
|
+
"tick(s) deferred) — resuming normal launching (#2587: a pending "
|
|
2097
|
+
"roll must never hold the queue down indefinitely)"
|
|
2098
|
+
)
|
|
2099
|
+
click.echo(f"warning: {reason}", err=True)
|
|
2100
|
+
try:
|
|
2101
|
+
record_drive_escalation(
|
|
2102
|
+
ROLL_PENDING_ALERT_REPO,
|
|
2103
|
+
ROLL_PENDING_ALERT_ISSUE,
|
|
2104
|
+
stage=ROLL_PENDING_ALERT_STAGE,
|
|
2105
|
+
reason=reason,
|
|
2106
|
+
gate_readings=(
|
|
2107
|
+
f"target_version={pending.target_version} | reason={pending.reason} | "
|
|
2108
|
+
f"ttl_seconds={pending.ttl_seconds} | "
|
|
2109
|
+
f"deferrals={pending.deferrals}/{pending.max_deferrals}"
|
|
2110
|
+
),
|
|
2111
|
+
proposed_command=(
|
|
2112
|
+
f"coord release propagate --target {pending.target_version}"
|
|
2113
|
+
),
|
|
2114
|
+
)
|
|
2115
|
+
except Exception as exc: # noqa: BLE001 — the stderr line above is the
|
|
2116
|
+
# floor; an escalation table that cannot be written must not take
|
|
2117
|
+
# the message down with it.
|
|
2118
|
+
click.echo(f" (could not record the roll-pending escalation: {exc})", err=True)
|
|
2119
|
+
|
|
2120
|
+
|
|
1875
2121
|
def _fetch_board_view() -> BoardView:
|
|
1876
2122
|
"""Board + live drive sessions, typed.
|
|
1877
2123
|
|
|
@@ -2842,6 +3088,24 @@ def drive_queue_tick(
|
|
|
2842
3088
|
safe to run with the periodic timer stopped — see
|
|
2843
3089
|
`docs/AGENT_OPERATIONS.md`'s propagation section for why that combination
|
|
2844
3090
|
used to deadlock.
|
|
3091
|
+
|
|
3092
|
+
#2587: when a fleet roll is pending (`coord release propagate`/
|
|
3093
|
+
`nightly-window` set the marker instead of draining — see
|
|
3094
|
+
`coord.drive_queue.RollPending`), this tick refuses to LAUNCH, whatever
|
|
3095
|
+
`--max-parallel` says — the same capacity-0 posture `--reconcile-only`
|
|
3096
|
+
gives #2110 — and, once THIS tick's own reconciliation empties the queue
|
|
3097
|
+
out (zero entries still occupying a slot), fires the roll
|
|
3098
|
+
(`systemctl --user start --no-block coord-release-window.service`).
|
|
3099
|
+
Unlike an EXPLICIT `--reconcile-only`/`--max-parallel 0` run, a pending
|
|
3100
|
+
roll does not also skip the #2350 direct-merge fast path: merging an
|
|
3101
|
+
already-fully-approved entry is not "launching new work", and letting it
|
|
3102
|
+
proceed frees that entry rather than leaving it queued for the whole
|
|
3103
|
+
span the marker survives. Never stops `coord-drive-queue.timer` to reach
|
|
3104
|
+
the gap — see the marker's own docstring for why that would reproduce
|
|
3105
|
+
#2569. Firing the roll does NOT clear the marker itself — see
|
|
3106
|
+
`RollPending`'s own docstring for why that clear belongs solely to the
|
|
3107
|
+
spawned `coord-release-window.service`, once it has actually confirmed
|
|
3108
|
+
the roll.
|
|
2845
3109
|
"""
|
|
2846
3110
|
from coord.filelock import FileLock, LockBusy, drive_queue_lock_path # noqa: PLC0415
|
|
2847
3111
|
from coord.state import list_drive_queue, update_drive_queue_entry # noqa: PLC0415
|
|
@@ -2860,7 +3124,15 @@ def drive_queue_tick(
|
|
|
2860
3124
|
# one flag is a mnemonic for the other rather than a second code path, so
|
|
2861
3125
|
# there is exactly one way this behaves, not two that could drift apart.
|
|
2862
3126
|
reconcile_only = reconcile_only or max_parallel == 0
|
|
2863
|
-
|
|
3127
|
+
# #2587 review: captured BEFORE a pending roll (below) forces
|
|
3128
|
+
# `reconcile_only` too — this is the operator's own EXPLICIT request,
|
|
3129
|
+
# used only to gate the #2350 merge-only fast path and the #2535
|
|
3130
|
+
# CI-revalidate sweep (both real external actions that flag's contract
|
|
3131
|
+
# promises not to take). A roll-pending marker must NOT also suppress
|
|
3132
|
+
# those: merging an already-approved entry is not "launching new work",
|
|
3133
|
+
# and skipping it would leave a mergeable entry queued for the marker's
|
|
3134
|
+
# entire span for no reason connected to the roll.
|
|
3135
|
+
explicit_reconcile_only = reconcile_only
|
|
2864
3136
|
|
|
2865
3137
|
lock = FileLock(drive_queue_lock_path())
|
|
2866
3138
|
try:
|
|
@@ -2887,6 +3159,28 @@ def drive_queue_tick(
|
|
|
2887
3159
|
|
|
2888
3160
|
entries = entries_from_rows(list_drive_queue())
|
|
2889
3161
|
|
|
3162
|
+
# #2587: is a fleet roll queued for the next inter-drive gap? Read
|
|
3163
|
+
# BEFORE `effective_capacity` is resolved — a live, unexpired marker
|
|
3164
|
+
# forces this tick into the same capacity-0 posture `--reconcile-only`
|
|
3165
|
+
# already gives #2110 (see `RollPending`'s docstring for why this
|
|
3166
|
+
# reuses that path rather than inventing a new one): reconcile,
|
|
3167
|
+
# launch nothing. It does NOT also force `explicit_reconcile_only`
|
|
3168
|
+
# (captured above, BEFORE this), so the #2350 merge-only fast path
|
|
3169
|
+
# below still runs — see this function's own docstring for why.
|
|
3170
|
+
# An EXPIRED marker (TTL or deferral ceiling — `RollPending.expired`)
|
|
3171
|
+
# is dropped right here, loudly (`_escalate_roll_pending_expired`),
|
|
3172
|
+
# and this tick proceeds exactly as if no marker had ever been set —
|
|
3173
|
+
# the #2587 "never hold the queue down indefinitely" requirement.
|
|
3174
|
+
now = time.time()
|
|
3175
|
+
roll_pending = read_roll_pending()
|
|
3176
|
+
if roll_pending is not None and roll_pending.expired(now):
|
|
3177
|
+
_escalate_roll_pending_expired(roll_pending, now=now)
|
|
3178
|
+
clear_roll_pending()
|
|
3179
|
+
roll_pending = None
|
|
3180
|
+
if roll_pending is not None:
|
|
3181
|
+
reconcile_only = True
|
|
3182
|
+
effective_capacity = 0 if reconcile_only else max_parallel
|
|
3183
|
+
|
|
2890
3184
|
# #1757: run each held gate's `--resume-when` BEFORE deciding
|
|
2891
3185
|
# anything, and hand the results to `plan_tick` as data so the
|
|
2892
3186
|
# decision half stays pure. Deliberately skipped under `--dry-run`:
|
|
@@ -2983,7 +3277,7 @@ def drive_queue_tick(
|
|
|
2983
3277
|
effective_capacity,
|
|
2984
3278
|
max_parallel_per_repo=max_parallel_per_repo,
|
|
2985
3279
|
probes=probes,
|
|
2986
|
-
now=
|
|
3280
|
+
now=now,
|
|
2987
3281
|
local_host=_local_host_id(),
|
|
2988
3282
|
exit_reasons=exit_reasons,
|
|
2989
3283
|
exit_refused=exit_refused,
|
|
@@ -2995,9 +3289,19 @@ def drive_queue_tick(
|
|
|
2995
3289
|
live_blocked_gate=live_blocked_gate,
|
|
2996
3290
|
editable_drift=editable_drift,
|
|
2997
3291
|
merge_only_ready=merge_only_ready,
|
|
3292
|
+
roll_pending_reason=roll_pending.describe() if roll_pending is not None else "",
|
|
2998
3293
|
)
|
|
2999
3294
|
|
|
3000
|
-
if
|
|
3295
|
+
if roll_pending is not None:
|
|
3296
|
+
# #2587: name the marker, not just the generic reconcile-only
|
|
3297
|
+
# notice below — an operator reading the journal should see WHY
|
|
3298
|
+
# without cross-referencing `coord drive-queue status`.
|
|
3299
|
+
click.echo(
|
|
3300
|
+
f"({roll_pending.describe()}: updating queue state, launching "
|
|
3301
|
+
f"nothing until the queue empties out — {plan.occupied} "
|
|
3302
|
+
"entries still occupying a slot)"
|
|
3303
|
+
)
|
|
3304
|
+
elif reconcile_only:
|
|
3001
3305
|
# #2110: capacity 0 already makes `plan_tick` return before its
|
|
3002
3306
|
# capacity walk (no deferrals, no queue-level alert, no launch —
|
|
3003
3307
|
# see its docstring's step 3), so `plan.launch` is guaranteed
|
|
@@ -3013,22 +3317,113 @@ def drive_queue_tick(
|
|
|
3013
3317
|
|
|
3014
3318
|
_apply_writes(plan)
|
|
3015
3319
|
|
|
3320
|
+
# #2587: this tick's own reconciliation (just applied above) may have
|
|
3321
|
+
# been the very thing that emptied the queue out — `plan.occupied` is
|
|
3322
|
+
# the POST-reconcile reading (see `RollPending`'s docstring), so this
|
|
3323
|
+
# is the earliest point at which "the inter-drive gap arrived" can be
|
|
3324
|
+
# known. Fires the roll the INSTANT that is true, rather than polling
|
|
3325
|
+
# a separate bounded drain — the whole point of #2587. Skipped
|
|
3326
|
+
# entirely once `dry_run` has already returned above, matching
|
|
3327
|
+
# `--dry-run`'s "mutate nothing" contract for every other write in
|
|
3328
|
+
# this function.
|
|
3329
|
+
if roll_pending is not None:
|
|
3330
|
+
if plan.occupied == 0:
|
|
3331
|
+
fired, detail = _fire_pending_roll()
|
|
3332
|
+
if fired:
|
|
3333
|
+
# #2587 review: this must NOT clear the marker. `fired`
|
|
3334
|
+
# here only means `systemctl --user start --no-block`
|
|
3335
|
+
# returned 0 — i.e. the start request was ACCEPTED — not
|
|
3336
|
+
# that a roll happened; `--no-block` returns the instant
|
|
3337
|
+
# the job is queued, before the spawned unit has even
|
|
3338
|
+
# begun executing, let alone reached its own read of this
|
|
3339
|
+
# marker. Clearing it here, in this same statement, raced
|
|
3340
|
+
# the freshly spawned `coord-release-window.service` out
|
|
3341
|
+
# from under it on every real invocation: that process
|
|
3342
|
+
# (`coord.commands.release.release_nightly_window`, run
|
|
3343
|
+
# with no `--target`) re-resolves the target from scratch
|
|
3344
|
+
# — a PyPI lookup plus a fleet-wide health gather, both
|
|
3345
|
+
# real network I/O — before it ever reaches its own
|
|
3346
|
+
# `existing = read_roll_pending()`. By then this tick's
|
|
3347
|
+
# `clear_roll_pending()` had already run, so `existing`
|
|
3348
|
+
# was always `None` and the spawned process took the "no
|
|
3349
|
+
# marker pending -> (re)set one and return" branch
|
|
3350
|
+
# instead of ever calling `coord release propagate` — the
|
|
3351
|
+
# roll never actually happened, silently, forever.
|
|
3352
|
+
#
|
|
3353
|
+
# The marker now stays exactly as it was (nothing here
|
|
3354
|
+
# rewrites `set_at`/`deferrals` either — this tick spends
|
|
3355
|
+
# no deferral on a successful fire attempt) and is
|
|
3356
|
+
# cleared ONLY by the spawned process itself, and only
|
|
3357
|
+
# once it has confirmed the roll — see
|
|
3358
|
+
# `release_nightly_window`'s "existing marker pending for
|
|
3359
|
+
# THIS target" branch, which attempts `coord release
|
|
3360
|
+
# propagate` and clears the marker on a verified/rolled/
|
|
3361
|
+
# up-to-date outcome. A `systemctl --user start` against
|
|
3362
|
+
# an already-active `Type=oneshot` unit is systemd's own
|
|
3363
|
+
# no-op (see `deploy/coord-release-window.service`), so
|
|
3364
|
+
# re-firing on every subsequent tick while that process
|
|
3365
|
+
# is still mid-run (or has already finished and cleared
|
|
3366
|
+
# the marker, in which case `roll_pending` reads `None`
|
|
3367
|
+
# next tick and this branch is never reached again) costs
|
|
3368
|
+
# nothing. Bounded, as ever, by the marker's own TTL — a
|
|
3369
|
+
# roll that never confirms still self-clears, per
|
|
3370
|
+
# `RollPending.expired`, rather than holding the queue
|
|
3371
|
+
# down waiting for a confirmation that never comes.
|
|
3372
|
+
click.echo(
|
|
3373
|
+
f"requested roll for {roll_pending.describe()}: {detail} "
|
|
3374
|
+
"— marker left in place; coord-release-window.service "
|
|
3375
|
+
"clears it once `coord release propagate` confirms the "
|
|
3376
|
+
"roll"
|
|
3377
|
+
)
|
|
3378
|
+
else:
|
|
3379
|
+
# Could not even hand off to systemd — stays pending, one
|
|
3380
|
+
# deferral spent, retried next tick. Loud (stderr): a
|
|
3381
|
+
# roll that is quiescent-ready but cannot be started is
|
|
3382
|
+
# not the benign "still busy" case below.
|
|
3383
|
+
bumped = _bump_roll_pending_deferral(roll_pending)
|
|
3384
|
+
write_roll_pending(bumped)
|
|
3385
|
+
click.echo(
|
|
3386
|
+
f"roll pending for v{roll_pending.target_version}: queue is "
|
|
3387
|
+
f"quiescent but could not start coord-release-window.service "
|
|
3388
|
+
f"({detail}) — will retry next tick "
|
|
3389
|
+
f"({bumped.deferrals}/{bumped.max_deferrals} deferrals)",
|
|
3390
|
+
err=True,
|
|
3391
|
+
)
|
|
3392
|
+
else:
|
|
3393
|
+
# Still busy — the normal, expected steady state while
|
|
3394
|
+
# waiting for a gap. Quiet on purpose: this is every tick's
|
|
3395
|
+
# cadence (every ~3 minutes in production) until the gap
|
|
3396
|
+
# arrives, same "benign, not a stall" reasoning
|
|
3397
|
+
# `Deferral.benign` already applies to a cordon/repo-limit/
|
|
3398
|
+
# backoff deferral elsewhere in this module.
|
|
3399
|
+
bumped = _bump_roll_pending_deferral(roll_pending)
|
|
3400
|
+
write_roll_pending(bumped)
|
|
3401
|
+
|
|
3016
3402
|
# #2350: attempt the direct merges `plan_tick` marked `merge_only`,
|
|
3017
3403
|
# right after the rest of the plan's writes have landed. Skipped
|
|
3018
|
-
# under `--reconcile-only
|
|
3019
|
-
# `
|
|
3020
|
-
#
|
|
3021
|
-
#
|
|
3022
|
-
#
|
|
3023
|
-
|
|
3404
|
+
# under an EXPLICIT `--reconcile-only`/`--max-parallel 0`
|
|
3405
|
+
# (`explicit_reconcile_only`, captured above before a roll-pending
|
|
3406
|
+
# marker can force plain `reconcile_only`) — that mode's whole
|
|
3407
|
+
# contract is "update queue state, launch nothing", and a live
|
|
3408
|
+
# `coord merge --only` attempt is exactly the external action it
|
|
3409
|
+
# promises not to take, same posture as the launch subprocess
|
|
3410
|
+
# further down. Deliberately NOT skipped merely because a roll is
|
|
3411
|
+
# pending (#2587 review): merging an already-fully-approved entry
|
|
3412
|
+
# is not "launching new work" — it is completing work the queue
|
|
3413
|
+
# already decided to do — and letting it proceed frees that entry
|
|
3414
|
+
# instead of leaving it queued, unmerged, for the marker's entire
|
|
3415
|
+
# span for no reason connected to the roll.
|
|
3416
|
+
if not explicit_reconcile_only:
|
|
3024
3417
|
_run_merge_only_candidates(plan, config_path)
|
|
3025
3418
|
|
|
3026
3419
|
# #2535: independent of the drive-queue plan above (this scans the
|
|
3027
3420
|
# MERGE queue directly, not drive-queue rows) — a bounded, best-effort
|
|
3028
3421
|
# CI re-run for any entry blocked solely on stale-but-green checks
|
|
3029
|
-
# with an already-approved review.
|
|
3030
|
-
#
|
|
3031
|
-
#
|
|
3422
|
+
# with an already-approved review. Still gated on the FULL
|
|
3423
|
+
# `reconcile_only` (roll-pending included, unlike the merge-only fast
|
|
3424
|
+
# path just above) — a `gh run rerun` is a real external action, and
|
|
3425
|
+
# unlike a direct merge it does not free a queued entry on its own,
|
|
3426
|
+
# so there is no equivalent reason to run it while a roll is pending.
|
|
3032
3427
|
if not reconcile_only:
|
|
3033
3428
|
_run_auto_revalidate_checks_stale(config_path)
|
|
3034
3429
|
|