code-coordinator 0.5.261__tar.gz → 0.5.263__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.261 → code_coordinator-0.5.263}/PKG-INFO +1 -1
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/lifecycle.py +11 -1
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/housekeeping.py +42 -10
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/merge_queue.py +57 -6
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/serve_app.py +234 -28
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_cap_762.py +100 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_portal_sync.py +45 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_serve.py +370 -8
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_thin_client_board_audit.py +5 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/.gitignore +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/CLAUDE.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/GOAL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/LICENSE +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/MANIFEST.in +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/README.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/__init__.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agent.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/audit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/block_log.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/board_service.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/brain.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/claim.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/cli.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/client.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/comments.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/config.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dao.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/db.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/deps.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/drive.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/events.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/filelock.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/freshness.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/gates.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/goal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/context.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/models.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/render.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/health/units.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/hooks.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/interactive.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/models.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/network.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/notify.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/openapi.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/parentage.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/plans.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/progress.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/release_window.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/reports.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/review.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/self_health.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/smoke.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/split_work.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/sql.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/state.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/test_author.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/test_report.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/usage.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/install-agent.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/pyproject.toml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/setup.cfg +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/__init__.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/conftest.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_db.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_events.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_init.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_models.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_network.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_session.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_split.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_state.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/types/generated.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.261 → code_coordinator-0.5.263}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -565,7 +565,17 @@ def serve(config_path: Path, bind_host: str, bind_port: int, token: str | None)
|
|
|
565
565
|
from coord.dao import SqliteStore
|
|
566
566
|
from coord.db import DB_PATH
|
|
567
567
|
from coord.serve_app import build_app as build_serve_app
|
|
568
|
-
from coord.serve_app import resolve_serve_token
|
|
568
|
+
from coord.serve_app import configure_daemon_logging, resolve_serve_token
|
|
569
|
+
|
|
570
|
+
# #2862: turn the daemon's own logging on BEFORE anything else runs.
|
|
571
|
+
# Without this the root logger has no handler and sits at WARNING, and
|
|
572
|
+
# `uvicorn.run(log_level="info")` below does not change that (it only
|
|
573
|
+
# configures the `uvicorn*` loggers) — so every `log.info(...)` in
|
|
574
|
+
# `serve_app._tick_loop`, including the customer-portal bridge's per-pass
|
|
575
|
+
# summary, was discarded before it was formatted. That is what made "Step
|
|
576
|
+
# 3d is quiet" unfalsifiable from the journal in #2824 and again in #2862.
|
|
577
|
+
# Level via $COORD_LOG_LEVEL (default INFO).
|
|
578
|
+
configure_daemon_logging()
|
|
569
579
|
|
|
570
580
|
# #2824: `allow_thin_client=False` — `coord serve` IS the daemon every
|
|
571
581
|
# thin client's `_load_config()` proxies to; it must always load the
|
|
@@ -21,6 +21,18 @@ Two guarantees make the sweep safe:
|
|
|
21
21
|
The sweep runs automatically on a low-cadence daemon tick and on demand via
|
|
22
22
|
``coord housekeeping`` (which routes through the daemon — the canonical DB lives
|
|
23
23
|
there).
|
|
24
|
+
|
|
25
|
+
#1107 Part 3: the same sweep also archives ``merge_queue`` rows in the
|
|
26
|
+
``MERGED`` terminal state once they're older than the retention window, into
|
|
27
|
+
``merge_queue_archive`` — mirroring the move-not-delete pattern above.
|
|
28
|
+
``merge_queue`` has no natural "close" event of its own (unlike assignments,
|
|
29
|
+
which age out via ``TERMINAL_STATUSES``), so without this a MERGED row lives
|
|
30
|
+
forever: 192 such rows had accumulated by 2026-07-12 and 61 more by
|
|
31
|
+
2026-07-30, both requiring a manual one-off ``DELETE``/``coord merge --drop``
|
|
32
|
+
declog. ``coord.merge_queue.merged_issue_keys()`` unions the live table with
|
|
33
|
+
the archive so the "already merged, don't re-enqueue" dedup in
|
|
34
|
+
``enqueue_approved_work``/``staging_items`` keeps working after a row ages
|
|
35
|
+
out.
|
|
24
36
|
"""
|
|
25
37
|
|
|
26
38
|
from __future__ import annotations
|
|
@@ -48,6 +60,9 @@ _ASSIGNMENTS = "assignments"
|
|
|
48
60
|
_ASSIGNMENTS_ARCHIVE = "assignments_archive"
|
|
49
61
|
_NOTIFICATIONS = "notifications"
|
|
50
62
|
_NOTIFICATIONS_ARCHIVE = "notifications_archive"
|
|
63
|
+
_MERGE_QUEUE = "merge_queue"
|
|
64
|
+
_MERGE_QUEUE_ARCHIVE = "merge_queue_archive"
|
|
65
|
+
_MERGE_QUEUE_MERGED_STATE = "merged"
|
|
51
66
|
_BATCH = 400 # keep IN(...) clauses well under SQLite's 999-variable limit
|
|
52
67
|
|
|
53
68
|
|
|
@@ -124,20 +139,26 @@ def _move_rows(
|
|
|
124
139
|
|
|
125
140
|
|
|
126
141
|
def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
|
|
127
|
-
"""Archive stale terminal assignments + their notifications
|
|
142
|
+
"""Archive stale terminal assignments + their notifications + merged
|
|
143
|
+
merge_queue entries.
|
|
128
144
|
|
|
129
145
|
Returns ``{"archived_assignments": N, "archived_notifications": M,
|
|
130
|
-
"dry_run": bool, "retention_days": D}``.
|
|
131
|
-
were (or, for ``dry_run``, would be)
|
|
146
|
+
"archived_merge_queue": K, "dry_run": bool, "retention_days": D}``.
|
|
147
|
+
``archived_*`` are the counts that were (or, for ``dry_run``, would be)
|
|
148
|
+
moved. A no-op returns zeros.
|
|
132
149
|
|
|
133
150
|
Conservative by construction: nothing active, recent (within the archive
|
|
134
151
|
window), queued-for-merge, latest-of-an-open-issue, or review-linked to any
|
|
135
|
-
such row is ever moved.
|
|
152
|
+
such row is ever moved. Merge queue entries are archived only once they
|
|
153
|
+
are in the terminal ``MERGED`` state (#1107 Part 3) — non-terminal /
|
|
154
|
+
conflicted entries are left for ``prune_stale_queue_entries`` or manual
|
|
155
|
+
``coord merge --drop``.
|
|
136
156
|
"""
|
|
137
157
|
cutoff = _archive_cutoff(now)
|
|
138
158
|
result = {
|
|
139
159
|
"archived_assignments": 0,
|
|
140
160
|
"archived_notifications": 0,
|
|
161
|
+
"archived_merge_queue": 0,
|
|
141
162
|
"dry_run": dry_run,
|
|
142
163
|
"retention_days": _archive_retention_days(),
|
|
143
164
|
}
|
|
@@ -151,13 +172,19 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
|
|
|
151
172
|
conn, f"SELECT {_KEEP_INDEX_COLUMNS} FROM {_ASSIGNMENTS}" # noqa: S608
|
|
152
173
|
).fetchall()
|
|
153
174
|
]
|
|
154
|
-
|
|
175
|
+
mq_rows = sql.execute(
|
|
176
|
+
conn,
|
|
177
|
+
"SELECT assignment_id, state, last_attempt, enqueued_at " # noqa: S608
|
|
178
|
+
f"FROM {_MERGE_QUEUE}",
|
|
179
|
+
).fetchall()
|
|
180
|
+
mq_ids = {r["assignment_id"] for r in mq_rows if r["assignment_id"]}
|
|
181
|
+
mq_merged_ids = [
|
|
155
182
|
r["assignment_id"]
|
|
156
|
-
for r in
|
|
157
|
-
conn, f"SELECT assignment_id FROM merge_queue" # noqa: S608
|
|
158
|
-
).fetchall()
|
|
183
|
+
for r in mq_rows
|
|
159
184
|
if r["assignment_id"]
|
|
160
|
-
|
|
185
|
+
and (r["state"] or "").lower() == _MERGE_QUEUE_MERGED_STATE
|
|
186
|
+
and (r["last_attempt"] or r["enqueued_at"] or 0) < cutoff
|
|
187
|
+
]
|
|
161
188
|
open_keys = {
|
|
162
189
|
(r["repo_name"], r["number"])
|
|
163
190
|
for r in sql.execute(
|
|
@@ -194,7 +221,8 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
|
|
|
194
221
|
|
|
195
222
|
result["archived_assignments"] = len(candidates)
|
|
196
223
|
result["archived_notifications"] = len(notif_ids)
|
|
197
|
-
|
|
224
|
+
result["archived_merge_queue"] = len(mq_merged_ids)
|
|
225
|
+
if dry_run or (not candidates and not notif_ids and not mq_merged_ids):
|
|
198
226
|
return result
|
|
199
227
|
|
|
200
228
|
with conn:
|
|
@@ -206,4 +234,8 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
|
|
|
206
234
|
_move_rows(
|
|
207
235
|
conn, _ASSIGNMENTS, _ASSIGNMENTS_ARCHIVE, "assignment_id", candidates
|
|
208
236
|
)
|
|
237
|
+
if mq_merged_ids:
|
|
238
|
+
_move_rows(
|
|
239
|
+
conn, _MERGE_QUEUE, _MERGE_QUEUE_ARCHIVE, "assignment_id", mq_merged_ids
|
|
240
|
+
)
|
|
209
241
|
return result
|
|
@@ -12,6 +12,7 @@ from __future__ import annotations
|
|
|
12
12
|
import inspect
|
|
13
13
|
import json
|
|
14
14
|
import logging
|
|
15
|
+
import sqlite3
|
|
15
16
|
import time
|
|
16
17
|
from dataclasses import dataclass, field
|
|
17
18
|
from datetime import datetime, timezone
|
|
@@ -3753,6 +3754,58 @@ def save_queue(items: list[QueuedMerge]) -> None:
|
|
|
3753
3754
|
retry_on_locked(_write)
|
|
3754
3755
|
|
|
3755
3756
|
|
|
3757
|
+
# ── Merged-history lookups (#1107 Part 3) ───────────────────────────────────
|
|
3758
|
+
#
|
|
3759
|
+
# `housekeeping.sweep()` archives MERGED merge_queue rows older than the
|
|
3760
|
+
# archive retention window into `merge_queue_archive` (same move-not-delete
|
|
3761
|
+
# pattern as `assignments`/`notifications`) so the live table stays bounded
|
|
3762
|
+
# instead of growing forever. `enqueue_approved_work()` and `staging_items()`
|
|
3763
|
+
# both dedup on "(repo, issue) already merged" to avoid re-surfacing an issue
|
|
3764
|
+
# whose prior work attempt already shipped — once the winning entry ages out
|
|
3765
|
+
# of the live table, that check must still see it, so it consults the
|
|
3766
|
+
# archive too.
|
|
3767
|
+
|
|
3768
|
+
def _archived_merged_issue_keys(conn: sqlite3.Connection) -> set[tuple[str, int]]:
|
|
3769
|
+
"""(repo_name, issue_number) pairs recorded MERGED in the archive.
|
|
3770
|
+
|
|
3771
|
+
`merge_queue_archive` only exists once a housekeeping sweep has archived
|
|
3772
|
+
at least one row (or archiving is disabled entirely), so this is
|
|
3773
|
+
defensive against the table being absent.
|
|
3774
|
+
"""
|
|
3775
|
+
try:
|
|
3776
|
+
rows = sql.execute(
|
|
3777
|
+
conn,
|
|
3778
|
+
"SELECT repo_name, issue_number FROM merge_queue_archive WHERE state = ?",
|
|
3779
|
+
(MERGED,),
|
|
3780
|
+
).fetchall()
|
|
3781
|
+
except sql.driver_errors(): # #2784: not just sqlite3.OperationalError
|
|
3782
|
+
# "no such table" surfaces as a *different* driver-named exception
|
|
3783
|
+
# per backend (sqlite3.OperationalError vs psycopg.errors.
|
|
3784
|
+
# UndefinedTable), so this must go through the dialect seam or the
|
|
3785
|
+
# not-yet-archived case becomes an uncaught crash on Postgres.
|
|
3786
|
+
return set()
|
|
3787
|
+
return {(r["repo_name"], r["issue_number"]) for r in rows}
|
|
3788
|
+
|
|
3789
|
+
|
|
3790
|
+
def merged_issue_keys() -> set[tuple[str, int]]:
|
|
3791
|
+
"""All ``(repo_name, issue_number)`` pairs ever recorded MERGED.
|
|
3792
|
+
|
|
3793
|
+
Unions the live ``merge_queue`` table with ``merge_queue_archive`` so
|
|
3794
|
+
callers get a correct answer regardless of whether the winning entry has
|
|
3795
|
+
since been archived by ``housekeeping.sweep()``.
|
|
3796
|
+
"""
|
|
3797
|
+
conn = get_connection()
|
|
3798
|
+
live = {
|
|
3799
|
+
(r["repo_name"], r["issue_number"])
|
|
3800
|
+
for r in sql.execute(
|
|
3801
|
+
conn,
|
|
3802
|
+
"SELECT repo_name, issue_number FROM merge_queue WHERE state = ?",
|
|
3803
|
+
(MERGED,),
|
|
3804
|
+
).fetchall()
|
|
3805
|
+
}
|
|
3806
|
+
return live | _archived_merged_issue_keys(conn)
|
|
3807
|
+
|
|
3808
|
+
|
|
3756
3809
|
# ── Enqueue ──────────────────────────────────────────────────────────────
|
|
3757
3810
|
|
|
3758
3811
|
def enqueue(
|
|
@@ -5403,12 +5456,10 @@ def staging_items(board, config, gh_ops: "GhOps | None" = None) -> list[StagingI
|
|
|
5403
5456
|
queued_branches: set[str] = {x.branch for x in existing_queue if x.branch}
|
|
5404
5457
|
|
|
5405
5458
|
# Fast-lookup: (repo_name, issue_number) pairs already MERGED so we skip
|
|
5406
|
-
# issues whose prior attempt was already shipped.
|
|
5407
|
-
|
|
5408
|
-
|
|
5409
|
-
|
|
5410
|
-
if x.state == MERGED
|
|
5411
|
-
}
|
|
5459
|
+
# issues whose prior attempt was already shipped. Consults the archive
|
|
5460
|
+
# too (#1107 Part 3) since the winning entry may have aged out of the
|
|
5461
|
+
# live table by the time a later duplicate work item shows up here.
|
|
5462
|
+
already_merged = merged_issue_keys()
|
|
5412
5463
|
|
|
5413
5464
|
result: list[StagingItem] = []
|
|
5414
5465
|
completed = list(getattr(board, "completed", []) or [])
|
|
@@ -60,6 +60,7 @@ from typing import TYPE_CHECKING
|
|
|
60
60
|
|
|
61
61
|
if TYPE_CHECKING:
|
|
62
62
|
import asyncio
|
|
63
|
+
import logging
|
|
63
64
|
|
|
64
65
|
from starlette.applications import Starlette
|
|
65
66
|
from starlette.middleware import Middleware
|
|
@@ -85,6 +86,84 @@ SERVE_PORT = 7435
|
|
|
85
86
|
SERVE_TOKEN_ENV = "COORD_SERVE_TOKEN"
|
|
86
87
|
SERVE_TOKEN_FILE = Path.home() / ".coord" / "serve_token"
|
|
87
88
|
|
|
89
|
+
# #2862: the daemon's own logging configuration. See
|
|
90
|
+
# ``configure_daemon_logging`` for why this exists at all.
|
|
91
|
+
DAEMON_LOG_LEVEL_ENV = "COORD_LOG_LEVEL"
|
|
92
|
+
DEFAULT_DAEMON_LOG_LEVEL = "INFO"
|
|
93
|
+
#: ``logging.Handler.name`` of the handler this module installs, so repeated
|
|
94
|
+
#: calls update it in place instead of stacking duplicates onto the logger.
|
|
95
|
+
DAEMON_LOG_HANDLER_NAME = "coord-daemon"
|
|
96
|
+
#: The logger tree the handler is attached to — every ``coord.*`` logger in
|
|
97
|
+
#: this package (``coord.serve``, ``coord.review``, ``coord.notify``, …).
|
|
98
|
+
DAEMON_LOG_LOGGER = "coord"
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def configure_daemon_logging(level: str | None = None) -> "logging.Logger":
|
|
102
|
+
"""Make ``coord.*`` log records actually reach the journal (#2862).
|
|
103
|
+
|
|
104
|
+
**This repo configures logging nowhere else, and that is a bug in exactly
|
|
105
|
+
one place: the long-lived daemons.** For a short-lived CLI the default is
|
|
106
|
+
fine — Python's root logger sits at ``WARNING`` with no handler attached,
|
|
107
|
+
so ``log.warning`` reaches :data:`logging.lastResort` (a bare stderr
|
|
108
|
+
``StreamHandler``) and ``log.info`` is dropped before it is even
|
|
109
|
+
formatted, because ``Logger.isEnabledFor(INFO)`` is ``False``.
|
|
110
|
+
|
|
111
|
+
``coord serve`` inherits that default, and ``uvicorn.run(...,
|
|
112
|
+
log_level="info")`` does **not** fix it: uvicorn's ``LOGGING_CONFIG``
|
|
113
|
+
configures only the ``uvicorn`` / ``uvicorn.error`` / ``uvicorn.access``
|
|
114
|
+
loggers and leaves the root logger handler-less. The consequence is the
|
|
115
|
+
whole of #2862: every ``log.info`` in ``_tick_loop`` — the passive
|
|
116
|
+
reconcile, the notify drain, auto-drain, milestone-gate and, the one that
|
|
117
|
+
cost two debugging rounds, **Step 3d's portal-sync summary** — was a
|
|
118
|
+
silent no-op on the real daemon. "Zero portal-related lines in the
|
|
119
|
+
journal" was therefore never evidence that the bridge was quiet; it was
|
|
120
|
+
guaranteed by construction whether the bridge ran or not.
|
|
121
|
+
|
|
122
|
+
Called from ``coord serve``'s entry point (``coord.commands.lifecycle``)
|
|
123
|
+
**before** ``uvicorn.run``. uvicorn's own ``dictConfig`` sets
|
|
124
|
+
``disable_existing_loggers: False``, so the handler installed here
|
|
125
|
+
survives that call untouched.
|
|
126
|
+
|
|
127
|
+
*level* defaults to ``$COORD_LOG_LEVEL`` and then to ``INFO``; an
|
|
128
|
+
unrecognised value degrades to ``INFO`` rather than raising (a typo in a
|
|
129
|
+
systemd ``EnvironmentFile`` must not stop the daemon from booting).
|
|
130
|
+
|
|
131
|
+
``propagate`` is deliberately left at its default ``True``: the root
|
|
132
|
+
logger has no handlers under uvicorn, and :meth:`logging.Logger.callHandlers`
|
|
133
|
+
only falls back to ``lastResort`` when it found *no* handler anywhere in
|
|
134
|
+
the chain — so records are emitted exactly once, while pytest's ``caplog``
|
|
135
|
+
(which captures at the root) still sees them.
|
|
136
|
+
|
|
137
|
+
Idempotent: repeated calls re-level the existing handler instead of
|
|
138
|
+
stacking a second copy, so a test (or a future second entry point) can
|
|
139
|
+
call it freely. Returns the configured logger.
|
|
140
|
+
"""
|
|
141
|
+
import logging # noqa: PLC0415
|
|
142
|
+
|
|
143
|
+
raw = level or os.environ.get(DAEMON_LOG_LEVEL_ENV) or DEFAULT_DAEMON_LOG_LEVEL
|
|
144
|
+
resolved = logging.getLevelName(str(raw).strip().upper())
|
|
145
|
+
if not isinstance(resolved, int):
|
|
146
|
+
# `getLevelName` returns the string "Level FOO" for an unknown name.
|
|
147
|
+
resolved = logging.INFO
|
|
148
|
+
|
|
149
|
+
logger = logging.getLogger(DAEMON_LOG_LOGGER)
|
|
150
|
+
logger.setLevel(resolved)
|
|
151
|
+
for existing in logger.handlers:
|
|
152
|
+
if getattr(existing, "name", None) == DAEMON_LOG_HANDLER_NAME:
|
|
153
|
+
existing.setLevel(resolved)
|
|
154
|
+
return logger
|
|
155
|
+
|
|
156
|
+
handler = logging.StreamHandler(sys.stderr)
|
|
157
|
+
handler.name = DAEMON_LOG_HANDLER_NAME
|
|
158
|
+
handler.setLevel(resolved)
|
|
159
|
+
# No timestamp: journald stamps every line itself, and a second one only
|
|
160
|
+
# makes `journalctl -u coord-serve | grep portal` noisier. The logger
|
|
161
|
+
# name IS the grep handle — `coord.serve`, `coord.portal_sync`, … — which
|
|
162
|
+
# `lastResort` (message only, no name, no level) never gave us.
|
|
163
|
+
handler.setFormatter(logging.Formatter("%(levelname)s %(name)s: %(message)s"))
|
|
164
|
+
logger.addHandler(handler)
|
|
165
|
+
return logger
|
|
166
|
+
|
|
88
167
|
|
|
89
168
|
def resolve_serve_token(flag_token: str | None = None) -> str | None:
|
|
90
169
|
"""Resolve the daemon's bearer token: flag > ``COORD_SERVE_TOKEN`` > file.
|
|
@@ -598,7 +677,8 @@ def _audit_housekeeping_sweep(swept: dict) -> None:
|
|
|
598
677
|
summary=(
|
|
599
678
|
f"housekeeping: archived {swept.get('archived_assignments', 0)} "
|
|
600
679
|
f"assignment(s), {swept.get('archived_notifications', 0)} "
|
|
601
|
-
"notification(s)"
|
|
680
|
+
f"notification(s), {swept.get('archived_merge_queue', 0)} "
|
|
681
|
+
"merge_queue entry(ies)"
|
|
602
682
|
),
|
|
603
683
|
details=swept,
|
|
604
684
|
)
|
|
@@ -7804,6 +7884,11 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
|
|
|
7804
7884
|
# portal's queue, and the heartbeat the portal uses to decide whether
|
|
7805
7885
|
# to trust the status it is showing is stale by exactly the downtime.
|
|
7806
7886
|
last_portal_sync = 0.0
|
|
7887
|
+
# #2862: the last (enabled, interval-positive) gate state Step 3d
|
|
7888
|
+
# logged, so a *change* — including the very first evaluation, from
|
|
7889
|
+
# ``None`` — is announced exactly once instead of either never (a
|
|
7890
|
+
# `False` boolean gate is silent by design) or on every 30 s tick.
|
|
7891
|
+
last_portal_gate_state: tuple[bool, bool] | None = None
|
|
7807
7892
|
|
|
7808
7893
|
# #1220: fleet-wide orphaned-worktree sweep on its own slow cadence
|
|
7809
7894
|
# (default hourly; 0 disables). Separate timer from housekeeping/
|
|
@@ -7973,6 +8058,7 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
|
|
|
7973
8058
|
async def _tick_loop() -> None:
|
|
7974
8059
|
nonlocal last_housekeeping, last_merge_reconcile, last_worktree_clean, last_wal_checkpoint
|
|
7975
8060
|
nonlocal last_notify_drain, last_notifier, last_portal_sync
|
|
8061
|
+
nonlocal last_portal_gate_state
|
|
7976
8062
|
from coord.audit import ( # noqa: PLC0415
|
|
7977
8063
|
flush_lock_contention_summary as _flush_audit_lock_contention_summary,
|
|
7978
8064
|
)
|
|
@@ -8315,29 +8401,92 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
|
|
|
8315
8401
|
# `config` actually *is* (`_config_mtime`/`config.path` at the
|
|
8316
8402
|
# top of `_tick_loop`, and how the daemon was launched) before
|
|
8317
8403
|
# re-suspecting this expression.
|
|
8404
|
+
#
|
|
8405
|
+
# #2862 — the SECOND time this went quiet, with #2824's root
|
|
8406
|
+
# cause ruled out (no `~/.coord/client.toml` on the daemon
|
|
8407
|
+
# host, the right `--config` on argv, `portal.enabled: true`
|
|
8408
|
+
# in that exact file). The check the note above asks for came
|
|
8409
|
+
# back clean, and the actual answer was that the *question was
|
|
8410
|
+
# unanswerable from the journal*: `coord serve` never
|
|
8411
|
+
# configures logging, and `uvicorn.run(log_level="info")`
|
|
8412
|
+
# configures only the `uvicorn*` loggers — so the root logger
|
|
8413
|
+
# stayed handler-less at WARNING and `log.info(...)` below was
|
|
8414
|
+
# dropped before formatting, on every pass, forever. "Zero
|
|
8415
|
+
# portal lines in the journal" was therefore not evidence of a
|
|
8416
|
+
# quiet bridge; it was true whether Step 3d ran or not. Fixed
|
|
8417
|
+
# at the source by `configure_daemon_logging()` (top of this
|
|
8418
|
+
# module, called from `coord serve`'s entry point). Two
|
|
8419
|
+
# consequences are handled right here:
|
|
8420
|
+
#
|
|
8421
|
+
# 1. The gate's *state* is now announced on change (below),
|
|
8422
|
+
# so "Step 3d is not running, and here is which half of
|
|
8423
|
+
# the guard said no" is greppable instead of inferred
|
|
8424
|
+
# from a frozen DB column three layers down. A `False`
|
|
8425
|
+
# boolean gate is silent by design — that is the shape of
|
|
8426
|
+
# a boolean, so the fix is to log the boolean, not to
|
|
8427
|
+
# keep re-reading the expression.
|
|
8428
|
+
# 2. Every pass now logs exactly one line, and a pass that
|
|
8429
|
+
# failed logs it at WARNING. The old `elif not
|
|
8430
|
+
# portal_result.heartbeat_ok: log.warning(...)` could
|
|
8431
|
+
# never fire for the case it was written for: a heartbeat
|
|
8432
|
+
# that *raises* also appends to `SyncResult.errors` (see
|
|
8433
|
+
# `coord.portal_sync.sync_tick`), so the `if
|
|
8434
|
+
# ... or portal_result.errors` branch above it always won
|
|
8435
|
+
# and downgraded the report to the INFO level that was
|
|
8436
|
+
# being discarded. A failed heartbeat is the single most
|
|
8437
|
+
# important thing this step can say — the portal is
|
|
8438
|
+
# showing a status nothing is refreshing — and it was
|
|
8439
|
+
# structurally unable to say it.
|
|
8318
8440
|
try:
|
|
8319
|
-
|
|
8320
|
-
portal_sync_interval > 0
|
|
8321
|
-
and config.portal.enabled
|
|
8322
|
-
and _time.monotonic() - last_portal_sync
|
|
8323
|
-
>= portal_sync_interval
|
|
8324
|
-
)
|
|
8441
|
+
portal_enabled = bool(config.portal.enabled)
|
|
8325
8442
|
except Exception: # noqa: BLE001
|
|
8326
|
-
|
|
8443
|
+
portal_enabled = False
|
|
8327
8444
|
log.warning("portal sync guard failed", exc_info=True)
|
|
8445
|
+
portal_gate_state = (portal_enabled, portal_sync_interval > 0)
|
|
8446
|
+
if portal_gate_state != last_portal_gate_state:
|
|
8447
|
+
last_portal_gate_state = portal_gate_state
|
|
8448
|
+
if not portal_enabled:
|
|
8449
|
+
log.warning(
|
|
8450
|
+
"portal sync: Step 3d DISABLED — portal.enabled is "
|
|
8451
|
+
"false in the config this daemon is running on "
|
|
8452
|
+
"(%s); the customer-portal bridge will not run",
|
|
8453
|
+
config.path,
|
|
8454
|
+
)
|
|
8455
|
+
elif portal_sync_interval <= 0:
|
|
8456
|
+
log.warning(
|
|
8457
|
+
"portal sync: Step 3d DISABLED — "
|
|
8458
|
+
"COORD_PORTAL_SYNC_INTERVAL=%s; the "
|
|
8459
|
+
"customer-portal bridge will not run",
|
|
8460
|
+
portal_sync_interval,
|
|
8461
|
+
)
|
|
8462
|
+
else:
|
|
8463
|
+
log.info(
|
|
8464
|
+
"portal sync: Step 3d ENABLED — every %.0fs "
|
|
8465
|
+
"(config=%s)",
|
|
8466
|
+
portal_sync_interval,
|
|
8467
|
+
config.path,
|
|
8468
|
+
)
|
|
8469
|
+
portal_due = (
|
|
8470
|
+
portal_gate_state[0]
|
|
8471
|
+
and portal_gate_state[1]
|
|
8472
|
+
and _time.monotonic() - last_portal_sync >= portal_sync_interval
|
|
8473
|
+
)
|
|
8328
8474
|
if portal_due:
|
|
8329
8475
|
last_portal_sync = _time.monotonic()
|
|
8330
8476
|
try:
|
|
8331
8477
|
portal_result = await run_in_threadpool(
|
|
8332
8478
|
_portal_sync_tick, config
|
|
8333
8479
|
)
|
|
8334
|
-
|
|
8335
|
-
|
|
8336
|
-
|
|
8337
|
-
|
|
8338
|
-
|
|
8339
|
-
|
|
8480
|
+
# One line per pass, unconditionally (#2862): a
|
|
8481
|
+
# heartbeat that lands and moves nothing is the
|
|
8482
|
+
# bridge's healthy steady state, and it is exactly
|
|
8483
|
+
# the state whose absence took two issues to notice.
|
|
8484
|
+
# `summary()` already opens with "portal sync: " — do
|
|
8485
|
+
# not prefix it again.
|
|
8486
|
+
if portal_result.errors or not portal_result.heartbeat_ok:
|
|
8340
8487
|
log.warning("%s", portal_result.summary())
|
|
8488
|
+
else:
|
|
8489
|
+
log.info("%s", portal_result.summary())
|
|
8341
8490
|
except Exception: # noqa: BLE001
|
|
8342
8491
|
log.warning("portal sync tick failed", exc_info=True)
|
|
8343
8492
|
# Step 4: #762 archival sweep on a slow cadence (default hourly).
|
|
@@ -8352,14 +8501,17 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
|
|
|
8352
8501
|
|
|
8353
8502
|
os.environ["COORD_HOUSEKEEPING_ON_DAEMON"] = "1"
|
|
8354
8503
|
swept = await run_in_threadpool(_hk.sweep)
|
|
8355
|
-
if
|
|
8356
|
-
"
|
|
8504
|
+
if (
|
|
8505
|
+
swept.get("archived_assignments")
|
|
8506
|
+
or swept.get("archived_notifications")
|
|
8507
|
+
or swept.get("archived_merge_queue")
|
|
8357
8508
|
):
|
|
8358
8509
|
log.info(
|
|
8359
8510
|
"housekeeping: archived %d assignment(s), "
|
|
8360
|
-
"%d notification(s)",
|
|
8511
|
+
"%d notification(s), %d merge_queue entry(ies)",
|
|
8361
8512
|
swept["archived_assignments"],
|
|
8362
8513
|
swept["archived_notifications"],
|
|
8514
|
+
swept.get("archived_merge_queue", 0),
|
|
8363
8515
|
)
|
|
8364
8516
|
_audit_housekeeping_sweep(swept)
|
|
8365
8517
|
except Exception: # noqa: BLE001
|
|
@@ -8494,30 +8646,84 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
|
|
|
8494
8646
|
except Exception: # noqa: BLE001
|
|
8495
8647
|
log.warning("wal-checkpoint tick failed", exc_info=True)
|
|
8496
8648
|
|
|
8649
|
+
def _watch(task, name: str): # noqa: ANN001,ANN202
|
|
8650
|
+
"""Say so — loudly — if a background loop ever stops (#2862).
|
|
8651
|
+
|
|
8652
|
+
These are bare ``asyncio.create_task`` loops with no supervisor:
|
|
8653
|
+
if one raises out of its ``while True``, its entire cadence stops
|
|
8654
|
+
for the rest of the process's life and nothing says a word.
|
|
8655
|
+
``asyncio``'s own "Task exception was never retrieved" warning
|
|
8656
|
+
only fires when the task object is garbage-collected, and these
|
|
8657
|
+
are held alive by ``_ctx``'s frame until shutdown — so in
|
|
8658
|
+
practice the traceback surfaces at process exit, if ever.
|
|
8659
|
+
|
|
8660
|
+
#2862 listed "the tick loop itself stalled" as suspect 3, to be
|
|
8661
|
+
"ruled out first" and filed separately if confirmed, and there
|
|
8662
|
+
was no way to do either from the journal. Now there is: a dead
|
|
8663
|
+
loop is one ERROR line naming itself.
|
|
8664
|
+
|
|
8665
|
+
Returns *task* so call sites stay one expression.
|
|
8666
|
+
"""
|
|
8667
|
+
if task is None:
|
|
8668
|
+
return None
|
|
8669
|
+
|
|
8670
|
+
def _done(t) -> None: # noqa: ANN001
|
|
8671
|
+
if t.cancelled():
|
|
8672
|
+
return # normal shutdown — `_ctx`'s finally cancels these
|
|
8673
|
+
exc = t.exception()
|
|
8674
|
+
log.error(
|
|
8675
|
+
"daemon loop %r STOPPED (%s) — its periodic work will not "
|
|
8676
|
+
"run again until `coord serve` is restarted",
|
|
8677
|
+
name,
|
|
8678
|
+
"raised" if exc is not None else "returned unexpectedly",
|
|
8679
|
+
exc_info=exc,
|
|
8680
|
+
)
|
|
8681
|
+
|
|
8682
|
+
task.add_done_callback(_done)
|
|
8683
|
+
return task
|
|
8684
|
+
|
|
8497
8685
|
@contextlib.asynccontextmanager
|
|
8498
8686
|
async def _ctx(_a): # noqa: ANN202
|
|
8499
|
-
|
|
8500
|
-
|
|
8501
|
-
|
|
8502
|
-
|
|
8687
|
+
# #2862: name the config this daemon is actually running on, once,
|
|
8688
|
+
# at startup. Step 3d's debugging note asks whoever hits the next
|
|
8689
|
+
# "the bridge is quiet" to "check what `config` actually *is* ...
|
|
8690
|
+
# and how the daemon was launched" — this is that check, answered
|
|
8691
|
+
# in the journal instead of by reading /proc.
|
|
8692
|
+
log.info(
|
|
8693
|
+
"tick loop starting: config=%s portal.enabled=%s "
|
|
8694
|
+
"reconcile=%.0fs portal_sync=%.0fs",
|
|
8695
|
+
config.path,
|
|
8696
|
+
getattr(getattr(config, "portal", None), "enabled", None),
|
|
8697
|
+
interval,
|
|
8698
|
+
portal_sync_interval,
|
|
8699
|
+
)
|
|
8700
|
+
task = _watch(
|
|
8701
|
+
asyncio.create_task(_tick_loop()) if interval > 0 else None,
|
|
8702
|
+
"tick",
|
|
8703
|
+
)
|
|
8704
|
+
gate_task = _watch(
|
|
8503
8705
|
asyncio.create_task(_gate_refresh_loop())
|
|
8504
8706
|
if interval > 0 and gate_refresh_interval > 0
|
|
8505
|
-
else None
|
|
8707
|
+
else None,
|
|
8708
|
+
"gate-refresh",
|
|
8506
8709
|
)
|
|
8507
|
-
health_task = (
|
|
8710
|
+
health_task = _watch(
|
|
8508
8711
|
asyncio.create_task(_health_refresh_loop())
|
|
8509
8712
|
if interval > 0 and health_poll_interval > 0
|
|
8510
|
-
else None
|
|
8713
|
+
else None,
|
|
8714
|
+
"health-refresh",
|
|
8511
8715
|
)
|
|
8512
|
-
phantom_heal_task = (
|
|
8716
|
+
phantom_heal_task = _watch(
|
|
8513
8717
|
asyncio.create_task(_phantom_heal_loop())
|
|
8514
8718
|
if interval > 0 and phantom_heal_interval > 0
|
|
8515
|
-
else None
|
|
8719
|
+
else None,
|
|
8720
|
+
"phantom-heal",
|
|
8516
8721
|
)
|
|
8517
|
-
auto_revalidate_task = (
|
|
8722
|
+
auto_revalidate_task = _watch(
|
|
8518
8723
|
asyncio.create_task(_auto_revalidate_loop())
|
|
8519
8724
|
if interval > 0 and auto_revalidate_interval > 0
|
|
8520
|
-
else None
|
|
8725
|
+
else None,
|
|
8726
|
+
"auto-revalidate",
|
|
8521
8727
|
)
|
|
8522
8728
|
try:
|
|
8523
8729
|
yield
|