code-coordinator 0.5.315__tar.gz → 0.5.316__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.315 → code_coordinator-0.5.316}/PKG-INFO +1 -1
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/github_ops.py +24 -2
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/reconcile.py +150 -16
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/serve_app.py +6 -1
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/state.py +135 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_merges.py +353 -4
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/.gitignore +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/CLAUDE.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/GOAL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/LICENSE +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/MANIFEST.in +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/README.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/__init__.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agent.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/audit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/block_log.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/board_service.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/brain.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/claim.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/cli.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/client.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/comments.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/config.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dao.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/db.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/deps.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/drive.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/events.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/filelock.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/freshness.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/gates.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/goal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/context.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/models.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/render.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/health/units.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/hooks.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/interactive.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/models.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/network.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/notify.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/openapi.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/parentage.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/plans.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/progress.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/release_window.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/reports.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/review.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/self_health.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/smoke.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/split_work.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/sql.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/test_author.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/test_report.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/usage.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/install-agent.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/pyproject.toml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/setup.cfg +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/__init__.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/backends.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/conftest.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_db.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_events.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_init.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_models.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_network.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_session.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_split.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_state.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.315 → code_coordinator-0.5.316}/tests/write_parity.py +0 -0
|
@@ -1892,7 +1892,9 @@ def list_remote_branch_names(repo: str) -> set[str]:
|
|
|
1892
1892
|
}
|
|
1893
1893
|
|
|
1894
1894
|
|
|
1895
|
-
def branch_exists_on_remote(
|
|
1895
|
+
def branch_exists_on_remote(
|
|
1896
|
+
repo: str, branch: str, *, cache: dict | None = None
|
|
1897
|
+
) -> bool:
|
|
1896
1898
|
"""Return True if `branch` currently exists on `repo` (owner/name) at GitHub.
|
|
1897
1899
|
|
|
1898
1900
|
Uses a targeted ``gh api`` call rather than listing all branches. Fails
|
|
@@ -1903,7 +1905,27 @@ def branch_exists_on_remote(repo: str, branch: str) -> bool:
|
|
|
1903
1905
|
|
|
1904
1906
|
Called by ``dispatch_review`` and ``_dispatch_fix`` (#586) to avoid
|
|
1905
1907
|
routing a follow-on assignment to a machine that can't fetch the branch.
|
|
1906
|
-
|
|
1908
|
+
|
|
1909
|
+
*cache* (#2989) is an optional caller-owned ``dict`` used to memoise the
|
|
1910
|
+
lookup for the duration of ONE sweep, mirroring
|
|
1911
|
+
:func:`work_is_terminal`'s ``cache=``. A single ``reconcile_board_merges``
|
|
1912
|
+
pass measured 1,304 ref lookups for only 851 distinct refs (1.53x
|
|
1913
|
+
redundancy) because sibling assignment rows — a work row and its
|
|
1914
|
+
conflict-fix, or a re-dispatch — legitimately share one branch. The
|
|
1915
|
+
cache is deliberately **per-pass and caller-scoped**, never module-level:
|
|
1916
|
+
branch existence is exactly the kind of fact that must be re-read on the
|
|
1917
|
+
next pass.
|
|
1918
|
+
"""
|
|
1919
|
+
key = (repo, branch)
|
|
1920
|
+
if cache is not None and key in cache:
|
|
1921
|
+
return cache[key]
|
|
1922
|
+
result = _branch_exists_on_remote_uncached(repo, branch)
|
|
1923
|
+
if cache is not None:
|
|
1924
|
+
cache[key] = result
|
|
1925
|
+
return result
|
|
1926
|
+
|
|
1927
|
+
|
|
1928
|
+
def _branch_exists_on_remote_uncached(repo: str, branch: str) -> bool:
|
|
1907
1929
|
try:
|
|
1908
1930
|
_gh("api", f"repos/{repo}/git/refs/heads/{branch}",
|
|
1909
1931
|
caller="github_ops.branch_exists_on_remote")
|
|
@@ -31,6 +31,23 @@ if TYPE_CHECKING:
|
|
|
31
31
|
# and treating a huge, all-matching-so-far diff as inconclusive (fail open).
|
|
32
32
|
_FALSE_MERGE_AUDIT_MAX_FILES = 20
|
|
33
33
|
|
|
34
|
+
# #2989: bounds the OUTER candidate set of that same sweep — the loop #2639
|
|
35
|
+
# left unbounded. Without it the set is proportional to project history
|
|
36
|
+
# (1,302 rows on the drive host, +1 per merge, never shrinking), re-probed
|
|
37
|
+
# every 30s. This is a per-pass ceiling applied newest-first as a backstop
|
|
38
|
+
# behind the persistent terminal marker (`state.mark_false_merge_audit_
|
|
39
|
+
# clean`); the older tail drains over subsequent passes as newer rows are
|
|
40
|
+
# confirmed and drop out permanently. Not applied to a targeted
|
|
41
|
+
# `--issue N` audit.
|
|
42
|
+
_FALSE_MERGE_AUDIT_MAX_ROWS = 50
|
|
43
|
+
|
|
44
|
+
# #2989: how often the sweep may run when the caller opts into throttling
|
|
45
|
+
# (the daemon's reconcile tick does; a manual `coord reconcile-merges` does
|
|
46
|
+
# not). It detects a rare, non-urgent condition — a merged-marked row whose
|
|
47
|
+
# branch still differs from base — which is an hourly sweep, not a
|
|
48
|
+
# twice-a-minute one.
|
|
49
|
+
_FALSE_MERGE_AUDIT_MIN_INTERVAL_SECONDS = 3600.0
|
|
50
|
+
|
|
34
51
|
|
|
35
52
|
def _query_agent(host: str, port: int = AGENT_PORT, timeout: float = 5.0) -> dict | None:
|
|
36
53
|
try:
|
|
@@ -2908,6 +2925,7 @@ def reconcile_board_merges(
|
|
|
2908
2925
|
repo: str | None = None,
|
|
2909
2926
|
issue: int | None = None,
|
|
2910
2927
|
dry_run: bool = False,
|
|
2928
|
+
throttle_false_merge_audit: bool = False,
|
|
2911
2929
|
) -> list[str]:
|
|
2912
2930
|
"""Reconcile done work assignments against git/GitHub reality.
|
|
2913
2931
|
|
|
@@ -2970,7 +2988,14 @@ def reconcile_board_merges(
|
|
|
2970
2988
|
catching a historical false ``status='merged'`` flip that predates this
|
|
2971
2989
|
fix (or any future bug shaped like it) rather than leaving it invisible
|
|
2972
2990
|
to every other diagnostic forever. See its own inline comment for the
|
|
2973
|
-
full methodology and false-positive guards.
|
|
2991
|
+
full methodology and false-positive guards.
|
|
2992
|
+
|
|
2993
|
+
#2989 bounds sweep (h)'s candidate set — it used to select every
|
|
2994
|
+
``merged`` work-like row in project history and re-probe all of them on
|
|
2995
|
+
the daemon's 30s tick (97% of a pass's ``gh`` calls). Set
|
|
2996
|
+
*throttle_false_merge_audit* to run that sweep at most hourly; the
|
|
2997
|
+
daemon tick does, a manual ``coord reconcile-merges`` deliberately does
|
|
2998
|
+
not. See the inline block above ``_false_merge_candidates``.)
|
|
2974
2999
|
"""
|
|
2975
3000
|
from coord import github_ops, state # noqa: PLC0415
|
|
2976
3001
|
|
|
@@ -3456,28 +3481,121 @@ def reconcile_board_merges(
|
|
|
3456
3481
|
# this is a FLAG for a human to check, exactly like the manual sweep this
|
|
3457
3482
|
# automates, not a verdict. Fail-open at every layer: any fetch failure
|
|
3458
3483
|
# skips that row/file rather than either flagging or clearing it.
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3484
|
+
#
|
|
3485
|
+
# BOUNDING (#2989) — three mechanisms, applied in this order. Before
|
|
3486
|
+
# them this sweep selected EVERY `merged` work-like row in the board:
|
|
3487
|
+
# 1,302 rows on the drive host, proportional to project history rather
|
|
3488
|
+
# than to work in flight, re-probed on the daemon's 30s tick. Measured,
|
|
3489
|
+
# that was 1,304 of one pass's 1,346 `gh` invocations (97%), and the
|
|
3490
|
+
# generator behind the fleet-wide secondary rate limiting #2809/#2858/
|
|
3491
|
+
# #2934/#2977 all treated symptomatically. (#2639 had already capped
|
|
3492
|
+
# the inner per-file loop — the wrong loop; the outer candidate set was
|
|
3493
|
+
# left unbounded.)
|
|
3494
|
+
#
|
|
3495
|
+
# (1) CADENCE. This detects a rare, non-urgent condition — a
|
|
3496
|
+
# merged-marked row whose branch still differs from base, which is
|
|
3497
|
+
# recovered by a human days later regardless. Twice a minute is
|
|
3498
|
+
# absurd for that. The daemon tick passes
|
|
3499
|
+
# `throttle_false_merge_audit=True` and the sweep then runs at most
|
|
3500
|
+
# once an hour (~120x fewer passes on its own). A manual `coord
|
|
3501
|
+
# reconcile-merges` / `coord diagnose` never throttles: an operator
|
|
3502
|
+
# who asked for a sweep gets one, deterministically.
|
|
3503
|
+
# (2) TERMINAL MARKER. A clean verdict is clean forever (branch
|
|
3504
|
+
# deleted, merged PR at the tip, already an ancestor of base, or
|
|
3505
|
+
# content byte-identical on base — none of those un-happen for a
|
|
3506
|
+
# terminal row). Persisting it (`state.mark_false_merge_audit_
|
|
3507
|
+
# clean`) drops the row from the candidate list permanently, which
|
|
3508
|
+
# makes the set proportional to *unaudited* merges — bounded by
|
|
3509
|
+
# recent throughput, not project age. This is the real fix, and
|
|
3510
|
+
# the same discipline `coord.gate_snapshot`'s refresh already
|
|
3511
|
+
# states ("merged history is never refreshed").
|
|
3512
|
+
# (3) RECENCY CAP. A backstop for the first pass after this ships (and
|
|
3513
|
+
# for any board whose marker was lost): audit at most
|
|
3514
|
+
# `_FALSE_MERGE_AUDIT_MAX_ROWS` rows per pass, newest first. A
|
|
3515
|
+
# false merge that has gone unnoticed for two months is not being
|
|
3516
|
+
# caught by a 30-second sweep anyway; the older tail is simply
|
|
3517
|
+
# drained over the following passes as newer rows get marked.
|
|
3518
|
+
#
|
|
3519
|
+
# An explicit `--issue N` bypasses (2) and (3) entirely: a targeted
|
|
3520
|
+
# re-audit must always re-probe, so a previously-cleared row stays
|
|
3521
|
+
# re-checkable by hand. Nothing here changes what the sweep CONCLUDES,
|
|
3522
|
+
# only how many probes it takes to conclude it.
|
|
3523
|
+
_false_merge_targeted = issue is not None
|
|
3524
|
+
_run_false_merge_audit = True
|
|
3525
|
+
if throttle_false_merge_audit and not _false_merge_targeted:
|
|
3526
|
+
_last_run = state.get_false_merge_audit_last_run()
|
|
3527
|
+
if (time.time() - _last_run) < _FALSE_MERGE_AUDIT_MIN_INTERVAL_SECONDS:
|
|
3528
|
+
_run_false_merge_audit = False
|
|
3529
|
+
|
|
3530
|
+
_false_merge_candidates: list[Assignment] = []
|
|
3531
|
+
if _run_false_merge_audit:
|
|
3532
|
+
_false_merge_candidates = [
|
|
3533
|
+
a
|
|
3534
|
+
for a in board.active + board.completed
|
|
3535
|
+
if a.status == "merged"
|
|
3536
|
+
and a.branch
|
|
3537
|
+
and (a.type in WORK_LIKE_TYPES or is_interactive_merge_session(a))
|
|
3538
|
+
and (repo is None or a.repo_name == repo)
|
|
3539
|
+
and (issue is None or a.issue_number == issue)
|
|
3540
|
+
# #2989: a row whose repo has no GitHub mapping is unprobeable —
|
|
3541
|
+
# drop it HERE rather than after the recency cap, so a pile of
|
|
3542
|
+
# orphaned rows (a repo since removed from coordinator.yml) can't
|
|
3543
|
+
# eat the cap's slots and starve the rows we can actually audit.
|
|
3544
|
+
and getattr(config.repo(a.repo_name), "github", None)
|
|
3545
|
+
]
|
|
3546
|
+
if not _false_merge_targeted:
|
|
3547
|
+
_already_clean = state.load_false_merge_audit_clean()
|
|
3548
|
+
if _already_clean:
|
|
3549
|
+
_false_merge_candidates = [
|
|
3550
|
+
a
|
|
3551
|
+
for a in _false_merge_candidates
|
|
3552
|
+
if a.assignment_id not in _already_clean
|
|
3553
|
+
]
|
|
3554
|
+
if len(_false_merge_candidates) > _FALSE_MERGE_AUDIT_MAX_ROWS:
|
|
3555
|
+
_false_merge_candidates.sort(
|
|
3556
|
+
key=lambda a: (a.finished_at or a.dispatched_at or 0.0),
|
|
3557
|
+
reverse=True,
|
|
3558
|
+
)
|
|
3559
|
+
_false_merge_candidates = _false_merge_candidates[
|
|
3560
|
+
:_FALSE_MERGE_AUDIT_MAX_ROWS
|
|
3561
|
+
]
|
|
3562
|
+
|
|
3563
|
+
if (
|
|
3564
|
+
_run_false_merge_audit
|
|
3565
|
+
and throttle_false_merge_audit
|
|
3566
|
+
and not _false_merge_targeted
|
|
3567
|
+
and not dry_run # a dry-run must not consume the real run's turn
|
|
3568
|
+
):
|
|
3569
|
+
# Stamp even when there was nothing to do — the point of the stamp is
|
|
3570
|
+
# "this sweep had its turn this hour", not "this sweep found work".
|
|
3571
|
+
state.set_false_merge_audit_last_run(time.time())
|
|
3572
|
+
|
|
3468
3573
|
if _false_merge_candidates:
|
|
3469
3574
|
from coord.branch_model import resolve_base_branch_for_issue_number # noqa: PLC0415
|
|
3470
3575
|
|
|
3471
3576
|
_false_merge_milestone_cache: dict = {}
|
|
3577
|
+
# #2989 mechanism (3'): one ref lookup per DISTINCT (repo, branch)
|
|
3578
|
+
# per pass, not one per row. Sibling rows legitimately share a
|
|
3579
|
+
# branch (a work row and its conflict-fix, a re-dispatch), which
|
|
3580
|
+
# measured 1.53x redundancy — ~453 wasted calls in a single pass.
|
|
3581
|
+
_false_merge_branch_cache: dict = {}
|
|
3582
|
+
_false_merge_confirmed_clean: list[str] = []
|
|
3472
3583
|
for a in _false_merge_candidates:
|
|
3473
3584
|
repo_cfg = config.repo(a.repo_name)
|
|
3474
3585
|
if repo_cfg is None or not repo_cfg.github:
|
|
3475
3586
|
continue
|
|
3476
3587
|
try:
|
|
3477
|
-
if not github_ops.branch_exists_on_remote(
|
|
3478
|
-
|
|
3588
|
+
if not github_ops.branch_exists_on_remote(
|
|
3589
|
+
repo_cfg.github, a.branch, cache=_false_merge_branch_cache
|
|
3590
|
+
):
|
|
3591
|
+
# branch gone — presumed genuinely merged + cleaned up,
|
|
3592
|
+
# and permanently so (#2989).
|
|
3593
|
+
_false_merge_confirmed_clean.append(a.assignment_id)
|
|
3594
|
+
continue
|
|
3479
3595
|
if github_ops.pr_is_merged(repo_cfg.github, a.branch):
|
|
3480
|
-
|
|
3596
|
+
# correctly tracked: a merged PR sits at this exact tip
|
|
3597
|
+
_false_merge_confirmed_clean.append(a.assignment_id)
|
|
3598
|
+
continue
|
|
3481
3599
|
base_branch = resolve_base_branch_for_issue_number(
|
|
3482
3600
|
repo_cfg,
|
|
3483
3601
|
repo_cfg.github,
|
|
@@ -3487,13 +3605,20 @@ def reconcile_board_merges(
|
|
|
3487
3605
|
ahead = github_ops.branch_commits_ahead(
|
|
3488
3606
|
repo_cfg.github, base_branch, a.branch
|
|
3489
3607
|
)
|
|
3490
|
-
if
|
|
3608
|
+
if ahead is None:
|
|
3609
|
+
# fail-open: the probe itself failed, so this row is NOT
|
|
3610
|
+
# confirmed clean — re-probe it next pass (#2989).
|
|
3611
|
+
continue
|
|
3612
|
+
if ahead == 0:
|
|
3613
|
+
# already an ancestor of base: its content landed, and
|
|
3614
|
+
# that is permanent (#2989).
|
|
3615
|
+
_false_merge_confirmed_clean.append(a.assignment_id)
|
|
3491
3616
|
continue
|
|
3492
3617
|
changed_files = github_ops.get_compare_files(
|
|
3493
3618
|
repo_cfg.github, base_branch, a.branch
|
|
3494
3619
|
)
|
|
3495
3620
|
if not changed_files:
|
|
3496
|
-
continue # can't confirm anything — fail open
|
|
3621
|
+
continue # can't confirm anything — fail open, re-probe
|
|
3497
3622
|
content_differs = False
|
|
3498
3623
|
differing_path = None
|
|
3499
3624
|
for _path in changed_files[:_FALSE_MERGE_AUDIT_MAX_FILES]:
|
|
@@ -3514,7 +3639,10 @@ def reconcile_board_merges(
|
|
|
3514
3639
|
differing_path = _path
|
|
3515
3640
|
break
|
|
3516
3641
|
if not content_differs:
|
|
3517
|
-
|
|
3642
|
+
# verbatim on base already — rebase/squash, not lost, and
|
|
3643
|
+
# a terminal row's content cannot un-land (#2989).
|
|
3644
|
+
_false_merge_confirmed_clean.append(a.assignment_id)
|
|
3645
|
+
continue
|
|
3518
3646
|
actions.append(
|
|
3519
3647
|
f"POSSIBLY LOST (#2639): {a.assignment_id} "
|
|
3520
3648
|
f"({a.repo_name} #{a.issue_number}, branch={a.branch}) is "
|
|
@@ -3535,4 +3663,10 @@ def reconcile_board_merges(
|
|
|
3535
3663
|
f"({a.repo_name} #{a.issue_number}): {exc}"
|
|
3536
3664
|
)
|
|
3537
3665
|
|
|
3666
|
+
# #2989: persist the terminal marker once, at the end of the sweep —
|
|
3667
|
+
# one board_meta write per pass, not one per row. Never on a
|
|
3668
|
+
# dry-run: `--dry-run` must not change what the next real pass does.
|
|
3669
|
+
if _false_merge_confirmed_clean and not dry_run:
|
|
3670
|
+
state.mark_false_merge_audit_clean(_false_merge_confirmed_clean)
|
|
3671
|
+
|
|
3538
3672
|
return actions
|
|
@@ -986,7 +986,12 @@ def _reconcile_merges_tick(config: Config) -> list[str]:
|
|
|
986
986
|
from coord.state import build_board, save_board # noqa: PLC0415
|
|
987
987
|
|
|
988
988
|
board = build_board()
|
|
989
|
-
|
|
989
|
+
# #2989: the daemon is the ONLY caller that opts into throttling the
|
|
990
|
+
# false-merge audit (sweep h). It ran on this same 30s tick against a
|
|
991
|
+
# candidate set proportional to project history — 97% of a reconcile
|
|
992
|
+
# pass's `gh` calls, and the demand behind the fleet-wide secondary rate
|
|
993
|
+
# limiting. A manual `coord reconcile-merges` still sweeps every time.
|
|
994
|
+
actions = reconcile_board_merges(board, config, throttle_false_merge_audit=True)
|
|
990
995
|
save_board(board)
|
|
991
996
|
if actions:
|
|
992
997
|
# #1038: one coarse operational row per tick that did something —
|
|
@@ -18,6 +18,7 @@ import sqlite3
|
|
|
18
18
|
import sys
|
|
19
19
|
import time
|
|
20
20
|
import warnings
|
|
21
|
+
from collections.abc import Iterable
|
|
21
22
|
from dataclasses import asdict, replace
|
|
22
23
|
from datetime import datetime, timezone
|
|
23
24
|
from pathlib import Path
|
|
@@ -4363,6 +4364,140 @@ def delete_milestone_gate(*, repo_name: str, tracking_issue: int) -> None:
|
|
|
4363
4364
|
)
|
|
4364
4365
|
|
|
4365
4366
|
|
|
4367
|
+
# ── #2989: the false-merge audit's terminal marker ──────────────────────────
|
|
4368
|
+
#
|
|
4369
|
+
# Sweep (h) of :func:`coord.reconcile.reconcile_board_merges` re-derives
|
|
4370
|
+
# "did this branch really land" for `status='merged'` rows. Its candidate
|
|
4371
|
+
# set was proportional to PROJECT HISTORY (1,302 rows on the drive host,
|
|
4372
|
+
# growing by one per merge, never shrinking) and it re-probed every one of
|
|
4373
|
+
# them against GitHub on the daemon's 30s tick — 97% of a reconcile pass's
|
|
4374
|
+
# `gh` calls, and the generator behind the fleet-wide secondary rate
|
|
4375
|
+
# limiting #2809/#2858/#2934/#2977 all treated symptomatically.
|
|
4376
|
+
#
|
|
4377
|
+
# A row whose audit came back CLEAN is clean forever: the branch was
|
|
4378
|
+
# deleted after a real merge, or a merged PR sits at its exact tip, or its
|
|
4379
|
+
# commits are already an ancestor of base, or its changed files are
|
|
4380
|
+
# byte-identical on base. None of those can un-happen for a row that is
|
|
4381
|
+
# already terminal. Recording the verdict makes the candidate set
|
|
4382
|
+
# proportional to *unaudited* merges — bounded by recent throughput — which
|
|
4383
|
+
# is the same discipline `coord.gate_snapshot`'s refresh already states
|
|
4384
|
+
# ("merged history is never refreshed").
|
|
4385
|
+
#
|
|
4386
|
+
# Stored as a JSON list of assignment_ids under one board_meta key, in the
|
|
4387
|
+
# same seam as `milestone_drains`/`milestone_gates` above. Local-DB only:
|
|
4388
|
+
# the only callers are the daemon's own reconcile tick and a `coord
|
|
4389
|
+
# reconcile-merges` CLI run, both of which execute against the canonical DB
|
|
4390
|
+
# (a thin client's `coord reconcile-merges` reroutes to the daemon before
|
|
4391
|
+
# reaching this code). Fail-open at both ends — a read or write problem
|
|
4392
|
+
# degrades to "re-probe next pass", never to a wrong verdict.
|
|
4393
|
+
|
|
4394
|
+
_FALSE_MERGE_AUDIT_CLEAN_KEY = "false_merge_audit_clean"
|
|
4395
|
+
|
|
4396
|
+
# Cap on the persisted clean-verdict list. It is append-only and bounded
|
|
4397
|
+
# only by total merge history, so trim it the way a ring buffer would: the
|
|
4398
|
+
# most recently confirmed rows are the ones a repeat pass would otherwise
|
|
4399
|
+
# re-probe first. Dropping the tail is safe — a forgotten row just gets
|
|
4400
|
+
# re-audited once and re-marked.
|
|
4401
|
+
_FALSE_MERGE_AUDIT_CLEAN_MAX = 5000
|
|
4402
|
+
|
|
4403
|
+
|
|
4404
|
+
def load_false_merge_audit_clean() -> set[str]:
|
|
4405
|
+
"""Return assignment_ids whose false-merge audit already came back clean.
|
|
4406
|
+
|
|
4407
|
+
Fails open to an empty set on any read problem — the caller then simply
|
|
4408
|
+
re-probes, which is correct-but-slower, never wrong.
|
|
4409
|
+
"""
|
|
4410
|
+
try:
|
|
4411
|
+
conn = get_connection()
|
|
4412
|
+
row = sql.execute(
|
|
4413
|
+
conn,
|
|
4414
|
+
"SELECT value FROM board_meta WHERE key = ?",
|
|
4415
|
+
(_FALSE_MERGE_AUDIT_CLEAN_KEY,),
|
|
4416
|
+
).fetchone()
|
|
4417
|
+
except Exception: # noqa: BLE001 — advisory cache, never load-bearing
|
|
4418
|
+
return set()
|
|
4419
|
+
if row is None:
|
|
4420
|
+
return set()
|
|
4421
|
+
try:
|
|
4422
|
+
data = json.loads(row["value"])
|
|
4423
|
+
except (TypeError, ValueError):
|
|
4424
|
+
return set()
|
|
4425
|
+
if not isinstance(data, list):
|
|
4426
|
+
return set()
|
|
4427
|
+
return {str(x) for x in data if isinstance(x, (str, int))}
|
|
4428
|
+
|
|
4429
|
+
|
|
4430
|
+
def mark_false_merge_audit_clean(assignment_ids: Iterable[str]) -> None:
|
|
4431
|
+
"""Record *assignment_ids* as permanently audited-clean (idempotent).
|
|
4432
|
+
|
|
4433
|
+
Never raises — this is an optimisation marker, and a board that cannot
|
|
4434
|
+
persist it must still reconcile correctly (just without the speedup).
|
|
4435
|
+
"""
|
|
4436
|
+
new = {str(a) for a in assignment_ids if a}
|
|
4437
|
+
if not new:
|
|
4438
|
+
return
|
|
4439
|
+
try:
|
|
4440
|
+
conn = get_connection()
|
|
4441
|
+
with conn:
|
|
4442
|
+
existing = load_false_merge_audit_clean()
|
|
4443
|
+
merged = existing | new
|
|
4444
|
+
if merged == existing:
|
|
4445
|
+
return
|
|
4446
|
+
# Keep insertion order stable-ish (old first, newly-confirmed
|
|
4447
|
+
# last) so the trim below drops the oldest confirmations.
|
|
4448
|
+
ordered = [a for a in existing if a in merged]
|
|
4449
|
+
ordered += [a for a in new if a not in existing]
|
|
4450
|
+
if len(ordered) > _FALSE_MERGE_AUDIT_CLEAN_MAX:
|
|
4451
|
+
ordered = ordered[-_FALSE_MERGE_AUDIT_CLEAN_MAX:]
|
|
4452
|
+
sql.upsert(
|
|
4453
|
+
conn,
|
|
4454
|
+
"board_meta",
|
|
4455
|
+
["key", "value"],
|
|
4456
|
+
(_FALSE_MERGE_AUDIT_CLEAN_KEY, json.dumps(ordered)),
|
|
4457
|
+
conflict_columns=["key"],
|
|
4458
|
+
)
|
|
4459
|
+
except Exception: # noqa: BLE001 — advisory cache, never load-bearing
|
|
4460
|
+
return
|
|
4461
|
+
|
|
4462
|
+
|
|
4463
|
+
_FALSE_MERGE_AUDIT_LAST_RUN_KEY = "false_merge_audit_last_run"
|
|
4464
|
+
|
|
4465
|
+
|
|
4466
|
+
def get_false_merge_audit_last_run() -> float:
|
|
4467
|
+
"""Epoch seconds of the last throttled false-merge audit, 0.0 if never."""
|
|
4468
|
+
try:
|
|
4469
|
+
conn = get_connection()
|
|
4470
|
+
row = sql.execute(
|
|
4471
|
+
conn,
|
|
4472
|
+
"SELECT value FROM board_meta WHERE key = ?",
|
|
4473
|
+
(_FALSE_MERGE_AUDIT_LAST_RUN_KEY,),
|
|
4474
|
+
).fetchone()
|
|
4475
|
+
except Exception: # noqa: BLE001
|
|
4476
|
+
return 0.0
|
|
4477
|
+
if row is None:
|
|
4478
|
+
return 0.0
|
|
4479
|
+
try:
|
|
4480
|
+
return float(row["value"])
|
|
4481
|
+
except (TypeError, ValueError):
|
|
4482
|
+
return 0.0
|
|
4483
|
+
|
|
4484
|
+
|
|
4485
|
+
def set_false_merge_audit_last_run(when: float) -> None:
|
|
4486
|
+
"""Stamp the last throttled false-merge audit run. Never raises."""
|
|
4487
|
+
try:
|
|
4488
|
+
conn = get_connection()
|
|
4489
|
+
with conn:
|
|
4490
|
+
sql.upsert(
|
|
4491
|
+
conn,
|
|
4492
|
+
"board_meta",
|
|
4493
|
+
["key", "value"],
|
|
4494
|
+
(_FALSE_MERGE_AUDIT_LAST_RUN_KEY, repr(float(when))),
|
|
4495
|
+
conflict_columns=["key"],
|
|
4496
|
+
)
|
|
4497
|
+
except Exception: # noqa: BLE001
|
|
4498
|
+
return
|
|
4499
|
+
|
|
4500
|
+
|
|
4366
4501
|
# ── #1630: fleet-health aggregation ─────────────────────────────────────────
|
|
4367
4502
|
# Local-DB only, like list_milestone_drains above — the only writer is the
|
|
4368
4503
|
# daemon's own health-poll tick (coord.serve_app), which always runs
|