code-coordinator 0.5.214__tar.gz → 0.5.215__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.214 → code_coordinator-0.5.215}/PKG-INFO +1 -1
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/auto_loop.py +32 -4
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/merge.py +18 -4
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/db.py +53 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/state.py +16 -5
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_auto_loop.py +100 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_fix.py +24 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_db.py +79 -1
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_state.py +86 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.gitignore +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/CLAUDE.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/GOAL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/LICENSE +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/MANIFEST.in +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/README.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/__init__.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agent.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/audit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/block_log.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/board_service.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/brain.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/claim.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/cli.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/client.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/comments.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/config.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dao.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deps.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/drive.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/events.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/filelock.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/freshness.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/gates.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/goal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/context.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/models.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/render.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/units.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/hooks.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/interactive.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/models.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/network.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notify.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/openapi.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/parentage.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/plans.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/progress.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/release_window.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/reports.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/review.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/self_health.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/smoke.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/split_work.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/test_author.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/test_report.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/usage.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/install-agent.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/pyproject.toml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/setup.cfg +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/__init__.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/conftest.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_events.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_init.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_models.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_network.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_session.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_split.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -34,6 +34,7 @@ Data model:
|
|
|
34
34
|
from __future__ import annotations
|
|
35
35
|
|
|
36
36
|
import logging
|
|
37
|
+
import sqlite3
|
|
37
38
|
import time
|
|
38
39
|
import uuid
|
|
39
40
|
from dataclasses import dataclass
|
|
@@ -1221,10 +1222,37 @@ def _dispatch_fix(
|
|
|
1221
1222
|
)
|
|
1222
1223
|
board.active.append(fix_assignment)
|
|
1223
1224
|
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1225
|
+
try:
|
|
1226
|
+
record_dispatched_assignment(
|
|
1227
|
+
assignment=fix_assignment,
|
|
1228
|
+
repo_github=repo.github,
|
|
1229
|
+
)
|
|
1230
|
+
except sqlite3.OperationalError as exc:
|
|
1231
|
+
if "database is locked" not in str(exc).lower():
|
|
1232
|
+
# Not the transient contention this guard exists for (#2538) —
|
|
1233
|
+
# a schema mismatch or malformed statement is a real bug and
|
|
1234
|
+
# must not be swallowed as an ordinary declined dispatch.
|
|
1235
|
+
raise
|
|
1236
|
+
# `record_dispatched_assignment` already retries transient
|
|
1237
|
+
# "database is locked" contention itself (coord.db.retry_on_locked,
|
|
1238
|
+
# via coord._record_dispatched_assignment_local) — this is only
|
|
1239
|
+
# reached once that bounded retry budget is exhausted. The fix
|
|
1240
|
+
# worker has already been POSTed to the agent above and is really
|
|
1241
|
+
# running; only the durable board-DB row failed to write. Treat it
|
|
1242
|
+
# the same as any other declined dispatch (no machine, agent
|
|
1243
|
+
# unreachable, …) rather than letting a transient lock crash the
|
|
1244
|
+
# whole caller (`coord merge`'s CI-fix queue, the review auto-loop,
|
|
1245
|
+
# …) — undo the in-memory append so a saved board never carries a
|
|
1246
|
+
# row this call never durably recorded, and let the caller's
|
|
1247
|
+
# existing "dispatch declined" handling take it from here.
|
|
1248
|
+
board.active.remove(fix_assignment)
|
|
1249
|
+
log.warning(
|
|
1250
|
+
"auto_loop: fix dispatch for %s hit persistent DB contention "
|
|
1251
|
+
"recording assignment %s (%s) — treating as not dispatched; "
|
|
1252
|
+
"will retry next run",
|
|
1253
|
+
work.assignment_id, fix_assignment.assignment_id, exc,
|
|
1254
|
+
)
|
|
1255
|
+
return None
|
|
1228
1256
|
return fix_assignment
|
|
1229
1257
|
|
|
1230
1258
|
|
|
@@ -610,10 +610,24 @@ def _dispatch_ci_fixes(events, config, *, dry_run: bool) -> None:
|
|
|
610
610
|
details={"reason": "ci_fix_retry_cap", "error": entry.error},
|
|
611
611
|
)
|
|
612
612
|
dispatched_any = True # the HUMAN_REQUIRED mutation needs saving
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
613
|
+
else:
|
|
614
|
+
# Budget remains but dispatch declined for another reason (no
|
|
615
|
+
# machine, an unrelated fix already in flight, agent
|
|
616
|
+
# unreachable, or — #2538 — `_dispatch_fix` hit persistent
|
|
617
|
+
# "database is locked" contention recording the assignment
|
|
618
|
+
# after its own bounded retry budget was exhausted) — leave the
|
|
619
|
+
# entry PENDING for the next tick to retry, exactly like a
|
|
620
|
+
# declined conflict-fix dispatch does. Echoed (matching
|
|
621
|
+
# `_dispatch_conflict_fixes`'s equivalent branch) so an
|
|
622
|
+
# operator watching `coord merge` isn't left wondering why
|
|
623
|
+
# nothing happened for this entry — and so a transient DB lock
|
|
624
|
+
# collision on ONE entry is visibly a retry, not a silent drop,
|
|
625
|
+
# while every other entry keeps processing normally.
|
|
626
|
+
click.echo(
|
|
627
|
+
f" {entry.repo_name} #{entry.issue_number}: "
|
|
628
|
+
"ci-fix not dispatched (no machine / already in flight / "
|
|
629
|
+
"transient DB contention — will retry next run)"
|
|
630
|
+
)
|
|
617
631
|
if dispatched_any:
|
|
618
632
|
save_board(fix_board)
|
|
619
633
|
|
|
@@ -15,7 +15,9 @@ from __future__ import annotations
|
|
|
15
15
|
import json
|
|
16
16
|
import os
|
|
17
17
|
import sqlite3
|
|
18
|
+
import time
|
|
18
19
|
from pathlib import Path
|
|
20
|
+
from typing import Callable, TypeVar
|
|
19
21
|
|
|
20
22
|
from coord.platform_paths import default_coord_dir
|
|
21
23
|
|
|
@@ -88,6 +90,57 @@ def close() -> None:
|
|
|
88
90
|
_conn = None
|
|
89
91
|
|
|
90
92
|
|
|
93
|
+
_T = TypeVar("_T")
|
|
94
|
+
|
|
95
|
+
# #2538: a handful of consecutive short retries — long enough to ride out a
|
|
96
|
+
# concurrent writer (the daemon's own passive tick, another `coord merge`/
|
|
97
|
+
# `coord notify` invocation) that only holds the DB for a moment, short
|
|
98
|
+
# enough that a genuinely stuck lock still fails fast rather than hanging
|
|
99
|
+
# `coord merge` for a long time.
|
|
100
|
+
_LOCK_RETRY_ATTEMPTS = 5
|
|
101
|
+
_LOCK_RETRY_BASE_DELAY_S = 0.1
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def retry_on_locked(
|
|
105
|
+
write: Callable[[], _T],
|
|
106
|
+
*,
|
|
107
|
+
attempts: int = _LOCK_RETRY_ATTEMPTS,
|
|
108
|
+
base_delay: float = _LOCK_RETRY_BASE_DELAY_S,
|
|
109
|
+
) -> _T:
|
|
110
|
+
"""Run *write* (a zero-arg callable performing one or more SQLite writes),
|
|
111
|
+
retrying with exponential backoff when SQLite raises ``database is
|
|
112
|
+
locked`` (#2538).
|
|
113
|
+
|
|
114
|
+
That error is transient contention — a concurrent writer holding the DB
|
|
115
|
+
at the exact moment this call tries to write, not a real failure — and a
|
|
116
|
+
short wait is very likely to let it clear. ``PRAGMA busy_timeout``
|
|
117
|
+
(set on every connection in :func:`_open`) already makes SQLite itself
|
|
118
|
+
wait before raising, but under sustained contention (several writers in
|
|
119
|
+
a tight loop) that single wait can still be exhausted; this adds a few
|
|
120
|
+
more short, backed-off attempts on top rather than failing on the first
|
|
121
|
+
collision.
|
|
122
|
+
|
|
123
|
+
Any other ``OperationalError`` (schema drift, a malformed statement, …)
|
|
124
|
+
is re-raised immediately without retrying — those are not transient, and
|
|
125
|
+
retrying would only delay surfacing a real bug. After *attempts*
|
|
126
|
+
consecutive ``database is locked`` collisions, re-raises the last
|
|
127
|
+
``sqlite3.OperationalError`` so the caller can decide how to degrade
|
|
128
|
+
(see ``coord.state._record_dispatched_assignment_local``, whose caller —
|
|
129
|
+
``coord.auto_loop._dispatch_fix`` — treats it as a declined dispatch
|
|
130
|
+
rather than letting it crash the whole run).
|
|
131
|
+
"""
|
|
132
|
+
delay = base_delay
|
|
133
|
+
for attempt in range(1, attempts + 1):
|
|
134
|
+
try:
|
|
135
|
+
return write()
|
|
136
|
+
except sqlite3.OperationalError as exc:
|
|
137
|
+
if "database is locked" not in str(exc).lower() or attempt >= attempts:
|
|
138
|
+
raise
|
|
139
|
+
time.sleep(delay)
|
|
140
|
+
delay *= 2
|
|
141
|
+
raise AssertionError("unreachable") # loop above always returns or raises
|
|
142
|
+
|
|
143
|
+
|
|
91
144
|
# ── Schema ────────────────────────────────────────────────────────────────────
|
|
92
145
|
|
|
93
146
|
def _ensure_schema(conn: sqlite3.Connection) -> None:
|
|
@@ -37,7 +37,7 @@ from coord._board_mapping import (
|
|
|
37
37
|
from coord.audit import record_audit as _record_audit
|
|
38
38
|
from coord.board_service import resolve as _board_service_resolve
|
|
39
39
|
from coord.board_service import route_write as _route_write
|
|
40
|
-
from coord.db import get_connection
|
|
40
|
+
from coord.db import get_connection, retry_on_locked
|
|
41
41
|
from coord.models import (
|
|
42
42
|
WORK_LIKE_TYPES,
|
|
43
43
|
Assignment,
|
|
@@ -1018,8 +1018,17 @@ def _record_dispatched_assignment_local(
|
|
|
1018
1018
|
)
|
|
1019
1019
|
|
|
1020
1020
|
conn = get_connection()
|
|
1021
|
-
|
|
1022
|
-
|
|
1021
|
+
|
|
1022
|
+
# #2538: this INSERT/commit is the one write in this function that's
|
|
1023
|
+
# actually load-bearing (unlike the best-effort `_record_audit` call
|
|
1024
|
+
# below it) — a concurrent writer (the daemon's own passive tick,
|
|
1025
|
+
# another `coord merge`/`coord notify` invocation) holding the DB for a
|
|
1026
|
+
# moment must not crash the caller. The statement is safe to retry
|
|
1027
|
+
# as-is: `assignment_id` is the primary key and the `ON CONFLICT ...
|
|
1028
|
+
# DO UPDATE` makes a re-attempted write idempotent.
|
|
1029
|
+
def _write() -> None:
|
|
1030
|
+
conn.execute(
|
|
1031
|
+
"""INSERT INTO assignments (
|
|
1023
1032
|
assignment_id, machine_name, repo_name, repo_github,
|
|
1024
1033
|
issue_number, issue_title, status, type, briefing,
|
|
1025
1034
|
files_allowed, model, dispatched_at, review_of_assignment_id,
|
|
@@ -1101,8 +1110,10 @@ def _record_dispatched_assignment_local(
|
|
|
1101
1110
|
assignment.driven_by,
|
|
1102
1111
|
assignment.dispatched_by_assignment_id,
|
|
1103
1112
|
),
|
|
1104
|
-
|
|
1105
|
-
|
|
1113
|
+
)
|
|
1114
|
+
conn.commit()
|
|
1115
|
+
|
|
1116
|
+
retry_on_locked(_write)
|
|
1106
1117
|
_record_audit(
|
|
1107
1118
|
tier="business",
|
|
1108
1119
|
category="dispatch",
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import sqlite3
|
|
5
6
|
import uuid
|
|
6
7
|
from dataclasses import replace
|
|
7
8
|
from typing import Any
|
|
@@ -2402,6 +2403,105 @@ class TestDispatchFixRemoteBranchGuard:
|
|
|
2402
2403
|
assert result.machine_name == "server"
|
|
2403
2404
|
|
|
2404
2405
|
|
|
2406
|
+
# ── #2538: persistent "database is locked" must decline, not crash ─────────
|
|
2407
|
+
|
|
2408
|
+
|
|
2409
|
+
class TestDispatchFixDbContention:
|
|
2410
|
+
"""coord-portal#2538: a concurrent writer (the daemon's own passive
|
|
2411
|
+
tick, another `coord merge`/`coord notify` invocation) can hold the DB
|
|
2412
|
+
at the exact moment `record_dispatched_assignment` tries to record a
|
|
2413
|
+
dispatched fix. `coord.state`'s own bounded retry
|
|
2414
|
+
(`coord.db.retry_on_locked`) already rides out a short collision; this
|
|
2415
|
+
covers what happens once that retry budget is well and truly exhausted
|
|
2416
|
+
— `_dispatch_fix` must degrade to its documented "None on failure"
|
|
2417
|
+
contract instead of letting the raw `sqlite3.OperationalError` crash
|
|
2418
|
+
the caller (`coord merge`'s CI-fix queue, the review auto-loop, …)."""
|
|
2419
|
+
|
|
2420
|
+
def _work(self, machine: str = "laptop") -> Assignment:
|
|
2421
|
+
return Assignment(
|
|
2422
|
+
machine_name=machine,
|
|
2423
|
+
repo_name="api",
|
|
2424
|
+
issue_number=5,
|
|
2425
|
+
issue_title="Fix thing",
|
|
2426
|
+
briefing="Original briefing.",
|
|
2427
|
+
assignment_id="work-2538",
|
|
2428
|
+
status="done",
|
|
2429
|
+
branch="issue-5-fix-thing",
|
|
2430
|
+
dispatched_at=0.0,
|
|
2431
|
+
finished_at=1.0,
|
|
2432
|
+
type="work",
|
|
2433
|
+
)
|
|
2434
|
+
|
|
2435
|
+
def test_persistent_lock_contention_returns_none_without_crashing(
|
|
2436
|
+
self,
|
|
2437
|
+
) -> None:
|
|
2438
|
+
cfg = _two_machine_config()
|
|
2439
|
+
work = self._work()
|
|
2440
|
+
board = Board(completed=[work])
|
|
2441
|
+
mock_http = MagicMock()
|
|
2442
|
+
mock_http.post.return_value.json.return_value = {"id": "fix-2538-a"}
|
|
2443
|
+
mock_http.post.return_value.raise_for_status = MagicMock()
|
|
2444
|
+
|
|
2445
|
+
with patch(
|
|
2446
|
+
"coord.auto_loop.record_dispatched_assignment",
|
|
2447
|
+
side_effect=sqlite3.OperationalError("database is locked"),
|
|
2448
|
+
):
|
|
2449
|
+
result = _dispatch_fix(
|
|
2450
|
+
work, "Fix briefing.", board, cfg, iteration=1,
|
|
2451
|
+
http_client=mock_http,
|
|
2452
|
+
)
|
|
2453
|
+
|
|
2454
|
+
assert result is None
|
|
2455
|
+
|
|
2456
|
+
def test_persistent_lock_contention_rolls_back_the_board_append(
|
|
2457
|
+
self,
|
|
2458
|
+
) -> None:
|
|
2459
|
+
"""The fix assignment is appended to `board.active` before the DB
|
|
2460
|
+
write is attempted (so a fully successful dispatch needs no extra
|
|
2461
|
+
round trip) — a failed write must undo that append, or a later
|
|
2462
|
+
`save_board` call (triggered by some OTHER entry succeeding in the
|
|
2463
|
+
same `coord merge` tick) would persist a phantom row that was never
|
|
2464
|
+
actually recorded."""
|
|
2465
|
+
cfg = _two_machine_config()
|
|
2466
|
+
work = self._work()
|
|
2467
|
+
board = Board(completed=[work])
|
|
2468
|
+
mock_http = MagicMock()
|
|
2469
|
+
mock_http.post.return_value.json.return_value = {"id": "fix-2538-b"}
|
|
2470
|
+
mock_http.post.return_value.raise_for_status = MagicMock()
|
|
2471
|
+
|
|
2472
|
+
with patch(
|
|
2473
|
+
"coord.auto_loop.record_dispatched_assignment",
|
|
2474
|
+
side_effect=sqlite3.OperationalError("database is locked"),
|
|
2475
|
+
):
|
|
2476
|
+
_dispatch_fix(
|
|
2477
|
+
work, "Fix briefing.", board, cfg, iteration=1,
|
|
2478
|
+
http_client=mock_http,
|
|
2479
|
+
)
|
|
2480
|
+
|
|
2481
|
+
assert board.active == []
|
|
2482
|
+
|
|
2483
|
+
def test_unrelated_operational_error_still_propagates(self) -> None:
|
|
2484
|
+
"""A genuine bug (schema drift, a malformed statement) must not be
|
|
2485
|
+
swallowed as if it were routine transient contention — only the
|
|
2486
|
+
specific `database is locked` message is treated as declinable."""
|
|
2487
|
+
cfg = _two_machine_config()
|
|
2488
|
+
work = self._work()
|
|
2489
|
+
board = Board(completed=[work])
|
|
2490
|
+
mock_http = MagicMock()
|
|
2491
|
+
mock_http.post.return_value.json.return_value = {"id": "fix-2538-c"}
|
|
2492
|
+
mock_http.post.return_value.raise_for_status = MagicMock()
|
|
2493
|
+
|
|
2494
|
+
with patch(
|
|
2495
|
+
"coord.auto_loop.record_dispatched_assignment",
|
|
2496
|
+
side_effect=sqlite3.OperationalError("no such column: bogus"),
|
|
2497
|
+
):
|
|
2498
|
+
with pytest.raises(sqlite3.OperationalError, match="no such column"):
|
|
2499
|
+
_dispatch_fix(
|
|
2500
|
+
work, "Fix briefing.", board, cfg, iteration=1,
|
|
2501
|
+
http_client=mock_http,
|
|
2502
|
+
)
|
|
2503
|
+
|
|
2504
|
+
|
|
2405
2505
|
# ── #1176: test-author bounce gets a type="test-author" fix, not "work" ─────
|
|
2406
2506
|
|
|
2407
2507
|
|
|
@@ -333,3 +333,27 @@ class TestDispatchCiFixesWrapper:
|
|
|
333
333
|
merge_cmd._dispatch_ci_fixes(events, two_machine_config, dry_run=False)
|
|
334
334
|
|
|
335
335
|
assert entry.state == PENDING
|
|
336
|
+
|
|
337
|
+
def test_declined_dispatch_under_budget_is_echoed(
|
|
338
|
+
self, two_machine_config: Config, coord_db, capsys,
|
|
339
|
+
) -> None:
|
|
340
|
+
"""#2538: a declined dispatch (including `_dispatch_fix` hitting
|
|
341
|
+
persistent DB-lock contention, which surfaces exactly like any
|
|
342
|
+
other decline — see coord.auto_loop._dispatch_fix) must be visible
|
|
343
|
+
in `coord merge` output, not silently dropped — otherwise an
|
|
344
|
+
operator watching the run has no idea this entry didn't advance."""
|
|
345
|
+
from coord.commands import merge as merge_cmd
|
|
346
|
+
from coord.state import save_board
|
|
347
|
+
|
|
348
|
+
board = Board()
|
|
349
|
+
save_board(board)
|
|
350
|
+
|
|
351
|
+
entry = _entry()
|
|
352
|
+
events = [self._checks_failed_event(entry)]
|
|
353
|
+
|
|
354
|
+
with patch("coord.ci_fix.dispatch_ci_fix", return_value=None):
|
|
355
|
+
merge_cmd._dispatch_ci_fixes(events, two_machine_config, dry_run=False)
|
|
356
|
+
|
|
357
|
+
out = capsys.readouterr().out
|
|
358
|
+
assert "ci-fix not dispatched" in out
|
|
359
|
+
assert f"#{entry.issue_number}" in out
|
|
@@ -9,7 +9,13 @@ from pathlib import Path
|
|
|
9
9
|
import pytest
|
|
10
10
|
|
|
11
11
|
from coord import db as db_mod
|
|
12
|
-
from coord.db import
|
|
12
|
+
from coord.db import (
|
|
13
|
+
_ensure_schema,
|
|
14
|
+
override_connection,
|
|
15
|
+
close,
|
|
16
|
+
_migrate_gate_order,
|
|
17
|
+
retry_on_locked,
|
|
18
|
+
)
|
|
13
19
|
|
|
14
20
|
|
|
15
21
|
# ── Fixtures ──────────────────────────────────────────────────────────────────
|
|
@@ -724,6 +730,78 @@ class TestMergeQueueCiFixDispatchesColumn:
|
|
|
724
730
|
conn.close()
|
|
725
731
|
|
|
726
732
|
|
|
733
|
+
# ── retry_on_locked (#2538) ─────────────────────────────────────────────────
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
class TestRetryOnLocked:
|
|
737
|
+
"""#2538: `coord merge` crashed the whole run on a transient
|
|
738
|
+
`sqlite3.OperationalError: database is locked` raised while recording a
|
|
739
|
+
dispatched CI-fix assignment. `retry_on_locked` gives a momentary
|
|
740
|
+
collision (the daemon's own passive tick, another `coord merge`/`coord
|
|
741
|
+
notify` invocation holding the DB) a few short, backed-off attempts to
|
|
742
|
+
clear before it becomes the caller's problem.
|
|
743
|
+
"""
|
|
744
|
+
|
|
745
|
+
def test_succeeds_immediately_when_no_contention(self) -> None:
|
|
746
|
+
calls = []
|
|
747
|
+
|
|
748
|
+
def _write() -> str:
|
|
749
|
+
calls.append(1)
|
|
750
|
+
return "ok"
|
|
751
|
+
|
|
752
|
+
assert retry_on_locked(_write) == "ok"
|
|
753
|
+
assert len(calls) == 1
|
|
754
|
+
|
|
755
|
+
def test_retries_through_transient_lock_then_succeeds(
|
|
756
|
+
self, monkeypatch: pytest.MonkeyPatch
|
|
757
|
+
) -> None:
|
|
758
|
+
sleeps: list[float] = []
|
|
759
|
+
monkeypatch.setattr(db_mod.time, "sleep", lambda s: sleeps.append(s))
|
|
760
|
+
|
|
761
|
+
attempts = {"n": 0}
|
|
762
|
+
|
|
763
|
+
def _write() -> str:
|
|
764
|
+
attempts["n"] += 1
|
|
765
|
+
if attempts["n"] < 3:
|
|
766
|
+
raise sqlite3.OperationalError("database is locked")
|
|
767
|
+
return "ok"
|
|
768
|
+
|
|
769
|
+
result = retry_on_locked(_write)
|
|
770
|
+
|
|
771
|
+
assert result == "ok"
|
|
772
|
+
assert attempts["n"] == 3
|
|
773
|
+
# Two collisions before the third, successful attempt — backed off
|
|
774
|
+
# (each wait longer than the last), never a busy-loop.
|
|
775
|
+
assert len(sleeps) == 2
|
|
776
|
+
assert sleeps[1] > sleeps[0]
|
|
777
|
+
|
|
778
|
+
def test_raises_after_exhausting_the_retry_budget(
|
|
779
|
+
self, monkeypatch: pytest.MonkeyPatch
|
|
780
|
+
) -> None:
|
|
781
|
+
monkeypatch.setattr(db_mod.time, "sleep", lambda s: None)
|
|
782
|
+
|
|
783
|
+
def _write() -> None:
|
|
784
|
+
raise sqlite3.OperationalError("database is locked")
|
|
785
|
+
|
|
786
|
+
with pytest.raises(sqlite3.OperationalError, match="database is locked"):
|
|
787
|
+
retry_on_locked(_write, attempts=3, base_delay=0.0)
|
|
788
|
+
|
|
789
|
+
def test_unrelated_operational_error_is_not_retried(self) -> None:
|
|
790
|
+
"""A schema/statement bug is a real failure, not transient
|
|
791
|
+
contention — it must surface on the very first attempt rather than
|
|
792
|
+
being retried (and delayed) as if it were lock contention."""
|
|
793
|
+
calls = []
|
|
794
|
+
|
|
795
|
+
def _write() -> None:
|
|
796
|
+
calls.append(1)
|
|
797
|
+
raise sqlite3.OperationalError("no such table: bogus")
|
|
798
|
+
|
|
799
|
+
with pytest.raises(sqlite3.OperationalError, match="no such table"):
|
|
800
|
+
retry_on_locked(_write)
|
|
801
|
+
|
|
802
|
+
assert len(calls) == 1
|
|
803
|
+
|
|
804
|
+
|
|
727
805
|
# ── override_connection ────────────────────────────────────────────────────────
|
|
728
806
|
|
|
729
807
|
class TestOverrideConnection:
|
|
@@ -399,6 +399,92 @@ class TestDispatchedByAssignmentId:
|
|
|
399
399
|
assert rows["sibling-load-001"]["dispatched_by_assignment_id"] == "origin-work-load"
|
|
400
400
|
|
|
401
401
|
|
|
402
|
+
class TestRecordDispatchedAssignmentLockContention:
|
|
403
|
+
"""#2538: `_record_dispatched_assignment_local`'s INSERT is the one
|
|
404
|
+
write in that function that's actually load-bearing (unlike the
|
|
405
|
+
best-effort `_record_audit` call alongside it) — a concurrent writer
|
|
406
|
+
(the daemon's own passive tick, another `coord merge`/`coord notify`
|
|
407
|
+
invocation) holding the DB for a moment must not be fatal. It now
|
|
408
|
+
retries transient `database is locked` collisions via
|
|
409
|
+
`coord.db.retry_on_locked` before giving up.
|
|
410
|
+
"""
|
|
411
|
+
|
|
412
|
+
class _FlakyConn:
|
|
413
|
+
"""Wraps a real (in-memory) connection, raising `database is
|
|
414
|
+
locked` on the first *fail_times* `execute()` calls before
|
|
415
|
+
delegating to the real one — simulates a concurrent writer holding
|
|
416
|
+
the DB for a few moments."""
|
|
417
|
+
|
|
418
|
+
def __init__(self, real_conn, fail_times: int) -> None:
|
|
419
|
+
self._real = real_conn
|
|
420
|
+
self._fail_times = fail_times
|
|
421
|
+
self.calls = 0
|
|
422
|
+
|
|
423
|
+
def execute(self, *args, **kwargs):
|
|
424
|
+
self.calls += 1
|
|
425
|
+
if self.calls <= self._fail_times:
|
|
426
|
+
import sqlite3
|
|
427
|
+
|
|
428
|
+
raise sqlite3.OperationalError("database is locked")
|
|
429
|
+
return self._real.execute(*args, **kwargs)
|
|
430
|
+
|
|
431
|
+
def commit(self):
|
|
432
|
+
return self._real.commit()
|
|
433
|
+
|
|
434
|
+
def test_retries_through_transient_lock_then_persists(
|
|
435
|
+
self, coord_db, monkeypatch
|
|
436
|
+
) -> None:
|
|
437
|
+
from coord.models import Assignment
|
|
438
|
+
from coord.state import record_dispatched_assignment
|
|
439
|
+
|
|
440
|
+
monkeypatch.setattr("coord.db.time.sleep", lambda s: None)
|
|
441
|
+
flaky = self._FlakyConn(coord_db, fail_times=2)
|
|
442
|
+
monkeypatch.setattr("coord.state.get_connection", lambda: flaky)
|
|
443
|
+
|
|
444
|
+
record_dispatched_assignment(
|
|
445
|
+
assignment=Assignment(
|
|
446
|
+
assignment_id="ci-fix-2538", machine_name="laptop",
|
|
447
|
+
repo_name="api", issue_number=9, issue_title="[fix-1] thing",
|
|
448
|
+
type="work",
|
|
449
|
+
),
|
|
450
|
+
repo_github="acme/api",
|
|
451
|
+
)
|
|
452
|
+
|
|
453
|
+
assert flaky.calls == 3 # two collisions, then the write that lands
|
|
454
|
+
row = coord_db.execute(
|
|
455
|
+
"SELECT status FROM assignments WHERE assignment_id=?",
|
|
456
|
+
("ci-fix-2538",),
|
|
457
|
+
).fetchone()
|
|
458
|
+
assert row is not None, "assignment must be durably recorded once the lock clears"
|
|
459
|
+
assert row["status"] == "running"
|
|
460
|
+
|
|
461
|
+
def test_raises_once_the_retry_budget_is_exhausted(
|
|
462
|
+
self, coord_db, monkeypatch
|
|
463
|
+
) -> None:
|
|
464
|
+
"""A lock that never clears within the bounded retry budget must
|
|
465
|
+
still surface to the caller — `coord.auto_loop._dispatch_fix` is
|
|
466
|
+
the layer responsible for turning that into a graceful "declined"
|
|
467
|
+
rather than a crash, not this one silently swallowing it."""
|
|
468
|
+
import sqlite3
|
|
469
|
+
|
|
470
|
+
from coord.models import Assignment
|
|
471
|
+
from coord.state import record_dispatched_assignment
|
|
472
|
+
|
|
473
|
+
monkeypatch.setattr("coord.db.time.sleep", lambda s: None)
|
|
474
|
+
flaky = self._FlakyConn(coord_db, fail_times=999)
|
|
475
|
+
monkeypatch.setattr("coord.state.get_connection", lambda: flaky)
|
|
476
|
+
|
|
477
|
+
with pytest.raises(sqlite3.OperationalError, match="database is locked"):
|
|
478
|
+
record_dispatched_assignment(
|
|
479
|
+
assignment=Assignment(
|
|
480
|
+
assignment_id="ci-fix-2538-b", machine_name="laptop",
|
|
481
|
+
repo_name="api", issue_number=9, issue_title="[fix-1] thing",
|
|
482
|
+
type="work",
|
|
483
|
+
),
|
|
484
|
+
repo_github="acme/api",
|
|
485
|
+
)
|
|
486
|
+
|
|
487
|
+
|
|
402
488
|
class TestRecordDispatchedAssignmentBranch:
|
|
403
489
|
"""#557: record_dispatched_assignment must persist the branch column so
|
|
404
490
|
coord reattach can find it for the remote push-back finalize."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/requires.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
{code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|