code-coordinator 0.5.519__tar.gz → 0.5.521__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.519 → code_coordinator-0.5.521}/PKG-INFO +1 -1
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/PKG-INFO +1 -1
- code_coordinator-0.5.521/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dr_verify.py +20 -6
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gates.py +214 -5
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dr_verify.py +71 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gates.py +208 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_sqlite_connect_ratchet.py +10 -1
- code_coordinator-0.5.519/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/.gitignore +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/CLAUDE.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/GOAL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/LICENSE +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/MANIFEST.in +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/README.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/__init__.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agent.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/audit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/backup.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/block_log.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/board_service.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/brain.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/claim.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/cli.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/client.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/codegen.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/comments.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/config.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dao.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/db.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/deps.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/drive.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/events.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/filelock.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/freshness.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/goal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/context.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/models.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/render.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/health/units.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/hooks.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/interactive.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/models.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/network.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/notify.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/openapi.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/parentage.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/plans.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/progress.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/release_window.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/reports.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/review.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/self_health.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/smoke.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/split_work.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/sql.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/state.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/test_author.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/test_report.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/usage.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/install-agent.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/pyproject.toml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/setup.cfg +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/__init__.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/backends.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/conftest.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_client.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_db.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_events.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_init.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_models.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_network.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_session.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_split.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_state.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.519 → code_coordinator-0.5.521}/tests/write_parity.py +0 -0
|
@@ -714,13 +714,26 @@ def live_board_assignment_count(live_db_path: Path) -> int:
|
|
|
714
714
|
count, which is always larger once a board has any history (#762's
|
|
715
715
|
retention cap). There is no need to *boot* a second daemon to answer this:
|
|
716
716
|
the live daemon (if one is even running) is not what is being tested here
|
|
717
|
-
— only "what would `/board` report for this file" is needed
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
717
|
+
— only "what would `/board` report for this file" is needed.
|
|
718
|
+
|
|
719
|
+
That answer is **not** simply :meth:`coord.dao.SqliteStore.board_projection`
|
|
720
|
+
— #762's retention window is only the first of two filters the route
|
|
721
|
+
applies. ``coord/serve_app.py``'s `/board` route also runs the projection
|
|
722
|
+
through :func:`coord.board_wire.bound_board_payload`, which caps terminal
|
|
723
|
+
assignments to :data:`coord.board_wire.MAX_TERMINAL_ASSIGNMENTS` (#1791) on
|
|
724
|
+
top of the retention window — a *second*, tighter cut a board with any
|
|
725
|
+
real history will always hit before the 14-day window ever does (#3451).
|
|
726
|
+
Skipping that second cut here made this function's own docstring claim —
|
|
727
|
+
"the same function `/board` route calls" — false: it counted a raw,
|
|
728
|
+
unbounded-by-cardinality projection while the restored side (a real
|
|
729
|
+
daemon's `/board`) counted the capped one, so parity failed on every real
|
|
730
|
+
fleet board regardless of whether the restore was actually fine.
|
|
731
|
+
:func:`coord.board_wire.bound_board_payload` mutates ``payload`` in place,
|
|
732
|
+
so applying it here before counting is the "one question, one answer"
|
|
733
|
+
version of asking a second daemon to boot just to answer a question the
|
|
734
|
+
daemon already knows how to answer without booting.
|
|
723
735
|
"""
|
|
736
|
+
from coord.board_wire import bound_board_payload # noqa: PLC0415
|
|
724
737
|
from coord.dao import SqliteStore # noqa: PLC0415
|
|
725
738
|
|
|
726
739
|
try:
|
|
@@ -730,6 +743,7 @@ def live_board_assignment_count(live_db_path: Path) -> int:
|
|
|
730
743
|
f"parity check failed: could not read the live board's /board "
|
|
731
744
|
f"count from {live_db_path}: {exc}"
|
|
732
745
|
) from None
|
|
746
|
+
bound_board_payload(payload)
|
|
733
747
|
rows = payload.get("assignments")
|
|
734
748
|
if not isinstance(rows, list):
|
|
735
749
|
raise DRVerifyError(
|
|
@@ -42,6 +42,7 @@ duck-typed shape they expect.
|
|
|
42
42
|
from __future__ import annotations
|
|
43
43
|
|
|
44
44
|
from dataclasses import asdict, dataclass, field
|
|
45
|
+
from datetime import datetime, timezone
|
|
45
46
|
from typing import TYPE_CHECKING
|
|
46
47
|
|
|
47
48
|
from coord.confirm_test import (
|
|
@@ -60,6 +61,21 @@ if TYPE_CHECKING: # avoid import cycles / heavy imports at module load
|
|
|
60
61
|
# "smoke_required" finds both a live merge attempt AND a `coord gates` read.
|
|
61
62
|
REVIEW_REQUIRED = "review_required"
|
|
62
63
|
SMOKE_REQUIRED = "smoke_required"
|
|
64
|
+
# #3445: distinct from the two tokens above — a latched HUMAN_REQUIRED
|
|
65
|
+
# merge-queue entry (an automated conflict-fix that already gave up, #1291)
|
|
66
|
+
# is not "review/smoke unmet", it is "the merge itself already failed and
|
|
67
|
+
# needs a human (or `--override-human-required`)". Clearing review or smoke
|
|
68
|
+
# cannot unstick it, so it outranks both as the merge gate's headline reason
|
|
69
|
+
# — see `_merge_queue_state_decision` and its call site in
|
|
70
|
+
# `build_gate_report`.
|
|
71
|
+
HUMAN_REQUIRED_BLOCKED = "human_required"
|
|
72
|
+
# #3445 review: SKIPPED is `_merge_queue_state_decision`'s own comment's
|
|
73
|
+
# other "parked, needs-attention" state alongside HUMAN_REQUIRED (and
|
|
74
|
+
# `coord/drive.py`'s `_RETRYABLE_MERGE_STATUSES` docstring independently
|
|
75
|
+
# documents it as equally terminal, unlike CONFLICT, which self-heals via
|
|
76
|
+
# `dispatch_conflict_fix` and is deliberately NOT in this override) — so it
|
|
77
|
+
# gets the same headline-outranking treatment, not just HUMAN_REQUIRED.
|
|
78
|
+
SKIPPED_BLOCKED = "skipped"
|
|
63
79
|
|
|
64
80
|
|
|
65
81
|
@dataclass
|
|
@@ -451,6 +467,124 @@ def _exempt_dependency_notes_for_winner(
|
|
|
451
467
|
return []
|
|
452
468
|
|
|
453
469
|
|
|
470
|
+
def _iso(ts: float | None) -> str | None:
|
|
471
|
+
if not ts:
|
|
472
|
+
return None
|
|
473
|
+
return datetime.fromtimestamp(float(ts), tz=timezone.utc).strftime("%Y-%m-%d %H:%M:%SZ")
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
def _merge_queue_state_decision(
|
|
477
|
+
repo_name: str, issue_number: int, fallback_assignment_id: str | None,
|
|
478
|
+
) -> GateDecision | None:
|
|
479
|
+
"""The REAL, persisted ``merge_queue`` row's state for
|
|
480
|
+
``(repo_name, issue_number)``, or ``None`` when no such row exists
|
|
481
|
+
(#3445).
|
|
482
|
+
|
|
483
|
+
This is deliberately a *second* read, distinct from the synthetic
|
|
484
|
+
``QueuedMerge`` :func:`build_gate_report` builds via
|
|
485
|
+
``mq.live_gate_entry`` to feed the review/test/registry gate checks:
|
|
486
|
+
that object is constructed fresh on every call and never persisted, so
|
|
487
|
+
it always carries the dataclass default ``state=PENDING`` — it was
|
|
488
|
+
never going to surface a *latched* CONFLICT/HUMAN_REQUIRED/SKIPPED.
|
|
489
|
+
Before this, ``coord gates`` had no read of the real merge-queue table
|
|
490
|
+
at all, so an issue whose entry had already given up (an automated
|
|
491
|
+
conflict-fix exhausting its one retry, #1291, or a stale-rebase worker
|
|
492
|
+
refusing to push a non-content-preserving rebase) reported
|
|
493
|
+
``merge : BLOCKED — smoke_required`` — true in isolation, but not the
|
|
494
|
+
reason nothing is moving: clearing the smoke gate cannot unstick a
|
|
495
|
+
HUMAN_REQUIRED entry, only a human (or ``coord merge --only <aid>
|
|
496
|
+
--override-human-required``) can.
|
|
497
|
+
|
|
498
|
+
Matched on ``(repo_name, issue_number)`` — the same two facts
|
|
499
|
+
:func:`coord.drive_state._merge_entry` matches the raw ``merge_queue``
|
|
500
|
+
row against for exactly the same reason (a fix-chain may have re-keyed
|
|
501
|
+
the entry's ``assignment_id`` to a newer work row) — with
|
|
502
|
+
*fallback_assignment_id* (the winning work row `build_gate_report`
|
|
503
|
+
already selected) preferred when more than one row matches.
|
|
504
|
+
|
|
505
|
+
Fail-open like every other best-effort DB read in this module
|
|
506
|
+
(``_backfill_is_interactive``, ``_apply_gate_decision``): an
|
|
507
|
+
unreachable DB degrades to "no merge-queue line" rather than failing
|
|
508
|
+
the whole ``coord gates`` read.
|
|
509
|
+
"""
|
|
510
|
+
try:
|
|
511
|
+
from coord import merge_queue as mq # noqa: PLC0415
|
|
512
|
+
|
|
513
|
+
entries = mq.load_queue()
|
|
514
|
+
except Exception: # noqa: BLE001 — advisory only, see docstring
|
|
515
|
+
return None
|
|
516
|
+
|
|
517
|
+
matches = [
|
|
518
|
+
e for e in entries
|
|
519
|
+
if e.repo_name == repo_name and e.issue_number == issue_number
|
|
520
|
+
]
|
|
521
|
+
if not matches:
|
|
522
|
+
return None
|
|
523
|
+
if fallback_assignment_id:
|
|
524
|
+
by_aid = [e for e in matches if e.assignment_id == fallback_assignment_id]
|
|
525
|
+
if by_aid:
|
|
526
|
+
matches = by_aid
|
|
527
|
+
# First match in list order — not the most recent — mirroring
|
|
528
|
+
# `coord.drive_state._merge_entry` (the docstring's own cited
|
|
529
|
+
# precedent for matching on this same `(repo_name, issue_number)` pair):
|
|
530
|
+
# when more than one row matches and none matches *fallback_assignment_id*
|
|
531
|
+
# (e.g. a retarget/new branch for the same issue left an old row behind),
|
|
532
|
+
# `coord gates` must agree with the other `merge_queue` consumers
|
|
533
|
+
# (`coord drive-queue block-log`, `coord status`, `_decide_merge`) on
|
|
534
|
+
# which row is "the" entry, or the same issue reads differently on
|
|
535
|
+
# different surfaces (#3445 review).
|
|
536
|
+
entry = matches[0]
|
|
537
|
+
|
|
538
|
+
state = (entry.state or "").upper()
|
|
539
|
+
# PENDING/MERGING/MERGED (and any future non-terminal state) read as
|
|
540
|
+
# "nothing to escalate here" — the raw state name is still shown, but
|
|
541
|
+
# unadorned. CONFLICT/HUMAN_REQUIRED/SKIPPED are the parked, needs-
|
|
542
|
+
# attention states. Delegated to `mq._state_to_plan_status` — the
|
|
543
|
+
# CANONICAL classifier for this exact question (`PENDING`->READY,
|
|
544
|
+
# `MERGING`->MERGING, `MERGED`->MERGED, anything else, including any
|
|
545
|
+
# future/unknown state -> NEEDS_ATTENTION) — rather than a second,
|
|
546
|
+
# hand-maintained tuple of "which states need attention" that could
|
|
547
|
+
# silently drift from it (#2096, #3445 review). That classifier fails
|
|
548
|
+
# CLOSED on an unrecognized state; re-deriving the tri-state locally
|
|
549
|
+
# would fail open instead, exactly the "gate must be able to fail"
|
|
550
|
+
# pattern this repo's review checklist calls out.
|
|
551
|
+
ok = mq._state_to_plan_status(entry.state or "") != mq.PLAN_NEEDS_ATTENTION
|
|
552
|
+
|
|
553
|
+
reason: str | None = None
|
|
554
|
+
if state == "HUMAN_REQUIRED":
|
|
555
|
+
aid = entry.assignment_id or fallback_assignment_id or "<assignment-id>"
|
|
556
|
+
detail_lines = [entry.error or "no reason recorded"]
|
|
557
|
+
latched = _iso(entry.last_attempt)
|
|
558
|
+
if latched:
|
|
559
|
+
detail_lines.append(
|
|
560
|
+
f"as of last merge-queue write {latched} — this timestamp "
|
|
561
|
+
"does not advance while the entry is parked, so treat it as "
|
|
562
|
+
"a LOWER BOUND on when it latched, not necessarily still "
|
|
563
|
+
"current (#3445)"
|
|
564
|
+
)
|
|
565
|
+
else:
|
|
566
|
+
detail_lines.append(
|
|
567
|
+
"latched time unknown — no merge-queue attempt timestamp "
|
|
568
|
+
"recorded on this entry"
|
|
569
|
+
)
|
|
570
|
+
detail_lines.append(
|
|
571
|
+
f"override: coord merge --only {aid} --override-human-required "
|
|
572
|
+
"'<reason>'"
|
|
573
|
+
)
|
|
574
|
+
reason = "\n".join(detail_lines)
|
|
575
|
+
elif not ok:
|
|
576
|
+
reason = entry.error or None
|
|
577
|
+
|
|
578
|
+
return GateDecision(
|
|
579
|
+
gate="merge_queue",
|
|
580
|
+
required=False,
|
|
581
|
+
ok=ok,
|
|
582
|
+
reason=reason,
|
|
583
|
+
state=state or None,
|
|
584
|
+
assignment_id=entry.assignment_id or None,
|
|
585
|
+
)
|
|
586
|
+
|
|
587
|
+
|
|
454
588
|
def _apply_gate_decision(repo_name: str, issue_number: int) -> GateDecision | None:
|
|
455
589
|
"""The ``"apply"`` :class:`GateDecision` for *(repo_name, issue_number)*,
|
|
456
590
|
or ``None`` when there is no ``--hold-after`` deploy-gate entry for it in
|
|
@@ -741,8 +875,42 @@ def build_gate_report(
|
|
|
741
875
|
registry_decisions[gate_name] = decision
|
|
742
876
|
report.decisions.append(decision)
|
|
743
877
|
|
|
878
|
+
# #3445: the REAL, persisted merge-queue row — distinct from the
|
|
879
|
+
# synthetic `entry` above, which always reads state=PENDING (see
|
|
880
|
+
# `_merge_queue_state_decision`'s docstring). Read AFTER the registry
|
|
881
|
+
# gates so it can be reported alongside them, but consulted FIRST below
|
|
882
|
+
# when deciding the merge gate's headline reason: a latched
|
|
883
|
+
# HUMAN_REQUIRED (or SKIPPED, #3445 review) entry is the actual reason
|
|
884
|
+
# nothing is moving, and no amount of review/smoke/registry-gate
|
|
885
|
+
# clearing can unstick it. CONFLICT is deliberately NOT in this set — it
|
|
886
|
+
# self-heals via `dispatch_conflict_fix` (#1474), so it does not outrank
|
|
887
|
+
# the normal review/smoke headline.
|
|
888
|
+
mq_state_decision = _merge_queue_state_decision(
|
|
889
|
+
repo_name, issue_number, winner.assignment_id,
|
|
890
|
+
)
|
|
891
|
+
if mq_state_decision is not None:
|
|
892
|
+
report.decisions.append(mq_state_decision)
|
|
893
|
+
|
|
744
894
|
merge_blocked_gate: str | None = None
|
|
745
|
-
if
|
|
895
|
+
if mq_state_decision is not None and mq_state_decision.state in (
|
|
896
|
+
"HUMAN_REQUIRED", "SKIPPED",
|
|
897
|
+
):
|
|
898
|
+
# #3445 review: the full detail (reason, latched-time caveat,
|
|
899
|
+
# override command) is already rendered on the "merge-queue" line
|
|
900
|
+
# `format_gate_report` prints alongside this one — keep the
|
|
901
|
+
# presentation cross-reference ("see the merge-queue line above...")
|
|
902
|
+
# OUT of this data field, since `merge.reason` is also consumed
|
|
903
|
+
# verbatim by non-CLI-rendering readers with no such line above it
|
|
904
|
+
# (`coord.queue_diagnose`'s `_gates()` probe). This field stays a
|
|
905
|
+
# short, state-only headline; `format_gate_report` adds the
|
|
906
|
+
# cross-reference itself, only where the referent actually exists.
|
|
907
|
+
token = (
|
|
908
|
+
HUMAN_REQUIRED_BLOCKED
|
|
909
|
+
if mq_state_decision.state == "HUMAN_REQUIRED"
|
|
910
|
+
else SKIPPED_BLOCKED
|
|
911
|
+
)
|
|
912
|
+
merge_blocked_gate = f"{token} — {mq_state_decision.state}"
|
|
913
|
+
elif review_required and not review_ok:
|
|
746
914
|
merge_blocked_gate = REVIEW_REQUIRED
|
|
747
915
|
elif smoke_required and not test_ok:
|
|
748
916
|
merge_blocked_gate = SMOKE_REQUIRED
|
|
@@ -912,6 +1080,29 @@ def format_gate_report(report: GateReport) -> str:
|
|
|
912
1080
|
lines.append(f" {test.reason}")
|
|
913
1081
|
else:
|
|
914
1082
|
lines.append(f" test : BLOCKED — {test.reason}")
|
|
1083
|
+
# #3445: the REAL, persisted merge-queue row's state — distinct from
|
|
1084
|
+
# the review/test/merge decisions above, which are all evaluated
|
|
1085
|
+
# against a synthetic, never-persisted entry (see
|
|
1086
|
+
# `_merge_queue_state_decision`'s docstring). Only printed when a
|
|
1087
|
+
# row actually exists for this (repo, issue) — the common case for
|
|
1088
|
+
# an issue that never reached the merge queue at all is silence,
|
|
1089
|
+
# same convention as the "apply" line below. A HUMAN_REQUIRED row
|
|
1090
|
+
# gets its full multi-line detail (reason, latched-time caveat,
|
|
1091
|
+
# override command); every other state is a single unadorned line.
|
|
1092
|
+
merge_queue_decision = by_gate.get("merge_queue")
|
|
1093
|
+
if merge_queue_decision is not None:
|
|
1094
|
+
state_label = merge_queue_decision.state or "UNKNOWN"
|
|
1095
|
+
detail_lines = (
|
|
1096
|
+
merge_queue_decision.reason.split("\n")
|
|
1097
|
+
if merge_queue_decision.reason
|
|
1098
|
+
else []
|
|
1099
|
+
)
|
|
1100
|
+
if not detail_lines:
|
|
1101
|
+
lines.append(f" merge-queue : {state_label}")
|
|
1102
|
+
else:
|
|
1103
|
+
lines.append(f" merge-queue : {state_label} — {detail_lines[0]}")
|
|
1104
|
+
for extra in detail_lines[1:]:
|
|
1105
|
+
lines.append(f" {extra}")
|
|
915
1106
|
# #3273 (S-5 of #3261): any other registry-backed gate (today just
|
|
916
1107
|
# "uat") renders generically here, in `report.decisions`' own
|
|
917
1108
|
# insertion order — a gate GATE_REGISTRY grows in the future needs no
|
|
@@ -919,7 +1110,7 @@ def format_gate_report(report: GateReport) -> str:
|
|
|
919
1110
|
# skipped/inapplicable one (UAT not configured, or an exempt issue)
|
|
920
1111
|
# gets an explicit reason instead of being silently omitted like it
|
|
921
1112
|
# was before #3273.
|
|
922
|
-
_KNOWN_GATE_LINES = ("review", "test", "merge", "apply")
|
|
1113
|
+
_KNOWN_GATE_LINES = ("review", "test", "merge_queue", "merge", "apply")
|
|
923
1114
|
for decision in report.decisions:
|
|
924
1115
|
if decision.gate in _KNOWN_GATE_LINES:
|
|
925
1116
|
continue
|
|
@@ -938,9 +1129,27 @@ def format_gate_report(report: GateReport) -> str:
|
|
|
938
1129
|
lines.append(f" {label} : BLOCKED — {decision.reason}")
|
|
939
1130
|
merge = by_gate.get("merge")
|
|
940
1131
|
if merge is not None:
|
|
941
|
-
|
|
942
|
-
" merge : READY"
|
|
943
|
-
|
|
1132
|
+
if merge.ok:
|
|
1133
|
+
lines.append(" merge : READY")
|
|
1134
|
+
else:
|
|
1135
|
+
lines.append(f" merge : BLOCKED — {merge.reason}")
|
|
1136
|
+
# #3445 review: the cross-reference belongs only in THIS
|
|
1137
|
+
# rendering, right after the "merge-queue" line it actually
|
|
1138
|
+
# points at — not baked into `merge.reason` itself, which
|
|
1139
|
+
# `coord.queue_diagnose`'s `_gates()` probe also surfaces
|
|
1140
|
+
# verbatim with no such line above it.
|
|
1141
|
+
if (
|
|
1142
|
+
merge_queue_decision is not None
|
|
1143
|
+
and merge_queue_decision.state in ("HUMAN_REQUIRED", "SKIPPED")
|
|
1144
|
+
):
|
|
1145
|
+
lines.append(
|
|
1146
|
+
" (see the merge-queue line above for detail"
|
|
1147
|
+
+ (
|
|
1148
|
+
" — the latched time and the override command)"
|
|
1149
|
+
if merge_queue_decision.state == "HUMAN_REQUIRED"
|
|
1150
|
+
else ")"
|
|
1151
|
+
)
|
|
1152
|
+
)
|
|
944
1153
|
# #3236: only printed when a --hold-after deploy gate actually
|
|
945
1154
|
# exists for this (repo, issue) — see `_apply_gate_decision`.
|
|
946
1155
|
apply_ = by_gate.get("apply")
|
|
@@ -576,6 +576,77 @@ def test_parity_failure_names_both_board_comparands_not_a_table_count(lane):
|
|
|
576
576
|
assert "/board (live)" in message
|
|
577
577
|
|
|
578
578
|
|
|
579
|
+
def _seed_recent_terminal_assignments(path: Path, *, count: int) -> None:
|
|
580
|
+
"""*count* RECENT terminal rows — inside #762's retention window, but
|
|
581
|
+
when *count* exceeds `coord.board_wire.MAX_TERMINAL_ASSIGNMENTS`, past
|
|
582
|
+
#1791's tighter cardinality cap the `/board` route applies on top of
|
|
583
|
+
retention. This is the #3451 shape: a store where the 14-day window keeps
|
|
584
|
+
everything, yet `/board` still trims — the case
|
|
585
|
+
`live_board_assignment_count` silently skipped before this fix.
|
|
586
|
+
"""
|
|
587
|
+
conn = sqlite3.connect(str(path))
|
|
588
|
+
conn.row_factory = sqlite3.Row
|
|
589
|
+
try:
|
|
590
|
+
_ensure_schema(conn)
|
|
591
|
+
now = time.time()
|
|
592
|
+
conn.executemany(
|
|
593
|
+
"INSERT INTO assignments (assignment_id, machine_name, repo_name, "
|
|
594
|
+
"repo_github, issue_number, issue_title, status, type, "
|
|
595
|
+
"dispatched_at, finished_at) VALUES (?,?,?,?,?,?,?,?,?,?)",
|
|
596
|
+
[
|
|
597
|
+
(
|
|
598
|
+
f"recent-term-{i}",
|
|
599
|
+
"precision",
|
|
600
|
+
"claude-coordinator",
|
|
601
|
+
"JDonaghy/claude-coordinator",
|
|
602
|
+
500_000 + i,
|
|
603
|
+
f"recent issue {i}",
|
|
604
|
+
"done",
|
|
605
|
+
"work",
|
|
606
|
+
now - i,
|
|
607
|
+
now - i,
|
|
608
|
+
)
|
|
609
|
+
for i in range(count)
|
|
610
|
+
],
|
|
611
|
+
)
|
|
612
|
+
conn.commit()
|
|
613
|
+
finally:
|
|
614
|
+
conn.close()
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
def test_live_board_assignment_count_matches_the_real_board_route_past_the_cap(
|
|
618
|
+
tmp_path, valid_config_path, coord_db,
|
|
619
|
+
):
|
|
620
|
+
"""#3451: the live side must count exactly what a real `/board` route
|
|
621
|
+
would serve for the same file — including #1791's `MAX_TERMINAL_ASSIGNMENTS`
|
|
622
|
+
cardinality cap, not just #762's retention window (#3135's fix stopped
|
|
623
|
+
short of it). Pins the two paths together with the real route, not a
|
|
624
|
+
reimplementation of it, so a future cap cannot drift between them again.
|
|
625
|
+
"""
|
|
626
|
+
pytest.importorskip("uvicorn")
|
|
627
|
+
from starlette.testclient import TestClient # noqa: PLC0415
|
|
628
|
+
|
|
629
|
+
from coord.board_wire import MAX_TERMINAL_ASSIGNMENTS # noqa: PLC0415
|
|
630
|
+
from coord.config import load as load_config # noqa: PLC0415
|
|
631
|
+
from coord.dao import SqliteStore # noqa: PLC0415
|
|
632
|
+
from coord.serve_app import build_app # noqa: PLC0415
|
|
633
|
+
|
|
634
|
+
db_path = tmp_path / "live-shaped.db"
|
|
635
|
+
_seed_recent_terminal_assignments(db_path, count=MAX_TERMINAL_ASSIGNMENTS + 150)
|
|
636
|
+
|
|
637
|
+
app = build_app(SqliteStore(db_path), load_config(valid_config_path))
|
|
638
|
+
with TestClient(app) as client:
|
|
639
|
+
resp = client.get("/board")
|
|
640
|
+
assert resp.status_code == 200
|
|
641
|
+
route_served = resp.json()["assignments"]
|
|
642
|
+
|
|
643
|
+
# Sanity: the seed really is past the cap — otherwise this test cannot
|
|
644
|
+
# tell the #3451 fix apart from the bug it regression-tests.
|
|
645
|
+
assert len(route_served) < MAX_TERMINAL_ASSIGNMENTS + 150
|
|
646
|
+
|
|
647
|
+
assert dr_verify.live_board_assignment_count(db_path) == len(route_served)
|
|
648
|
+
|
|
649
|
+
|
|
579
650
|
# ==========================================================================
|
|
580
651
|
# Acceptance: the scratch copy is removed on EVERY exit path
|
|
581
652
|
# ==========================================================================
|
|
@@ -12,7 +12,9 @@ import pytest
|
|
|
12
12
|
from coord import merge_queue as mq
|
|
13
13
|
from coord.config import Config, PipelineConfig, ReviewsConfig
|
|
14
14
|
from coord.gates import (
|
|
15
|
+
HUMAN_REQUIRED_BLOCKED,
|
|
15
16
|
REVIEW_REQUIRED,
|
|
17
|
+
SKIPPED_BLOCKED,
|
|
16
18
|
SMOKE_REQUIRED,
|
|
17
19
|
build_gate_report,
|
|
18
20
|
format_gate_report,
|
|
@@ -824,6 +826,212 @@ class TestApplyGate:
|
|
|
824
826
|
assert "MERGED, NOT APPLIED" not in text
|
|
825
827
|
|
|
826
828
|
|
|
829
|
+
# ── merge-queue latched state (#3445) ────────────────────────────────────────
|
|
830
|
+
# `mq.live_gate_entry` (used for the review/test/registry gates above) is a
|
|
831
|
+
# SYNTHETIC, never-persisted QueuedMerge — it always reads state=PENDING, so
|
|
832
|
+
# it was blind to a latched CONFLICT/HUMAN_REQUIRED/SKIPPED row. These tests
|
|
833
|
+
# cover the REAL, persisted `merge_queue` table read this issue adds.
|
|
834
|
+
|
|
835
|
+
class TestMergeQueueHumanRequired:
|
|
836
|
+
def test_no_merge_queue_entry_means_no_merge_queue_line(
|
|
837
|
+
self, config: Config, coord_db,
|
|
838
|
+
) -> None:
|
|
839
|
+
work = _work(test_state=None)
|
|
840
|
+
review = _review("w1", verdict="approve")
|
|
841
|
+
board = Board(active=[], completed=[work, review])
|
|
842
|
+
report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
|
|
843
|
+
|
|
844
|
+
by_gate = {d.gate: d for d in report.decisions}
|
|
845
|
+
assert "merge_queue" not in by_gate
|
|
846
|
+
assert by_gate["merge"].reason == SMOKE_REQUIRED
|
|
847
|
+
|
|
848
|
+
def test_pending_merge_queue_entry_does_not_override_smoke_required(
|
|
849
|
+
self, config: Config, coord_db,
|
|
850
|
+
) -> None:
|
|
851
|
+
work = _work(test_state=None)
|
|
852
|
+
review = _review("w1", verdict="approve")
|
|
853
|
+
board = Board(active=[], completed=[work, review])
|
|
854
|
+
mq.save_queue([
|
|
855
|
+
mq.QueuedMerge(
|
|
856
|
+
assignment_id="w1", repo_name="api", repo_github="acme/api",
|
|
857
|
+
branch="issue-42-foo", target_branch="main", issue_number=42,
|
|
858
|
+
issue_title="t", state=mq.PENDING,
|
|
859
|
+
)
|
|
860
|
+
])
|
|
861
|
+
report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
|
|
862
|
+
|
|
863
|
+
by_gate = {d.gate: d for d in report.decisions}
|
|
864
|
+
assert by_gate["merge_queue"].state == "PENDING"
|
|
865
|
+
assert by_gate["merge_queue"].ok is True
|
|
866
|
+
assert by_gate["merge"].reason == SMOKE_REQUIRED
|
|
867
|
+
assert "merge-queue : PENDING" in format_gate_report(report)
|
|
868
|
+
|
|
869
|
+
def test_human_required_entry_outranks_smoke_required(
|
|
870
|
+
self, config: Config, coord_db,
|
|
871
|
+
) -> None:
|
|
872
|
+
# #3445 repro (vimcode#523/#526): smoke never ran (test_state=None)
|
|
873
|
+
# AND the merge-queue entry already latched HUMAN_REQUIRED — a
|
|
874
|
+
# stale-rebase worker refused to push a non-content-preserving
|
|
875
|
+
# rebase. Clearing the smoke gate cannot unstick that, so it must be
|
|
876
|
+
# the merge gate's HEADLINE reason, not "smoke_required".
|
|
877
|
+
work = _work(test_state=None)
|
|
878
|
+
review = _review("w1", verdict="approve")
|
|
879
|
+
board = Board(active=[], completed=[work, review])
|
|
880
|
+
mq.save_queue([
|
|
881
|
+
mq.QueuedMerge(
|
|
882
|
+
assignment_id="w1", repo_name="api", repo_github="acme/api",
|
|
883
|
+
branch="issue-42-foo", target_branch="main", issue_number=42,
|
|
884
|
+
issue_title="t", state=mq.HUMAN_REQUIRED,
|
|
885
|
+
error=(
|
|
886
|
+
"stale-rebase worker refused to push: rebase was not "
|
|
887
|
+
"content-preserving — manual resolution required"
|
|
888
|
+
),
|
|
889
|
+
last_attempt=1_700_000_000.0,
|
|
890
|
+
)
|
|
891
|
+
])
|
|
892
|
+
report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
|
|
893
|
+
|
|
894
|
+
by_gate = {d.gate: d for d in report.decisions}
|
|
895
|
+
mq_decision = by_gate["merge_queue"]
|
|
896
|
+
assert mq_decision.state == "HUMAN_REQUIRED"
|
|
897
|
+
assert mq_decision.ok is False
|
|
898
|
+
assert "stale-rebase worker refused to push" in mq_decision.reason
|
|
899
|
+
assert "--override-human-required" in mq_decision.reason
|
|
900
|
+
|
|
901
|
+
merge = by_gate["merge"]
|
|
902
|
+
assert merge.ok is False
|
|
903
|
+
assert merge.reason != SMOKE_REQUIRED
|
|
904
|
+
assert merge.reason.startswith(HUMAN_REQUIRED_BLOCKED)
|
|
905
|
+
assert "HUMAN_REQUIRED" in merge.reason
|
|
906
|
+
|
|
907
|
+
text = format_gate_report(report)
|
|
908
|
+
assert "HUMAN_REQUIRED" in text
|
|
909
|
+
assert "stale-rebase worker refused to push" in text
|
|
910
|
+
assert "--override-human-required" in text
|
|
911
|
+
assert "merge-queue : HUMAN_REQUIRED" in text
|
|
912
|
+
assert "smoke_required" not in text
|
|
913
|
+
|
|
914
|
+
def test_human_required_with_no_recorded_error_still_reports(
|
|
915
|
+
self, config: Config, coord_db,
|
|
916
|
+
) -> None:
|
|
917
|
+
"""A HUMAN_REQUIRED entry with no `error` text at all (shouldn't
|
|
918
|
+
normally happen, but the reader must not crash or go silent)."""
|
|
919
|
+
work = _work(test_state="passed")
|
|
920
|
+
review = _review("w1", verdict="approve")
|
|
921
|
+
board = Board(active=[], completed=[work, review])
|
|
922
|
+
mq.save_queue([
|
|
923
|
+
mq.QueuedMerge(
|
|
924
|
+
assignment_id="w1", repo_name="api", repo_github="acme/api",
|
|
925
|
+
branch="issue-42-foo", target_branch="main", issue_number=42,
|
|
926
|
+
issue_title="t", state=mq.HUMAN_REQUIRED,
|
|
927
|
+
)
|
|
928
|
+
])
|
|
929
|
+
report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
|
|
930
|
+
|
|
931
|
+
by_gate = {d.gate: d for d in report.decisions}
|
|
932
|
+
assert "no reason recorded" in by_gate["merge_queue"].reason
|
|
933
|
+
assert "latched time unknown" in by_gate["merge_queue"].reason
|
|
934
|
+
assert by_gate["merge"].reason.startswith(HUMAN_REQUIRED_BLOCKED)
|
|
935
|
+
|
|
936
|
+
def test_skipped_entry_also_outranks_smoke_required(
|
|
937
|
+
self, config: Config, coord_db,
|
|
938
|
+
) -> None:
|
|
939
|
+
"""#3445 review: SKIPPED is the sibling terminal, needs-attention
|
|
940
|
+
state to HUMAN_REQUIRED (unlike CONFLICT, which self-heals via
|
|
941
|
+
`dispatch_conflict_fix`) — it must outrank `smoke_required` as the
|
|
942
|
+
merge gate's headline reason too, not just HUMAN_REQUIRED."""
|
|
943
|
+
work = _work(test_state=None)
|
|
944
|
+
review = _review("w1", verdict="approve")
|
|
945
|
+
board = Board(active=[], completed=[work, review])
|
|
946
|
+
mq.save_queue([
|
|
947
|
+
mq.QueuedMerge(
|
|
948
|
+
assignment_id="w1", repo_name="api", repo_github="acme/api",
|
|
949
|
+
branch="issue-42-foo", target_branch="main", issue_number=42,
|
|
950
|
+
issue_title="t", state=mq.SKIPPED,
|
|
951
|
+
error="closed as duplicate of #99",
|
|
952
|
+
)
|
|
953
|
+
])
|
|
954
|
+
report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
|
|
955
|
+
|
|
956
|
+
by_gate = {d.gate: d for d in report.decisions}
|
|
957
|
+
mq_decision = by_gate["merge_queue"]
|
|
958
|
+
assert mq_decision.state == "SKIPPED"
|
|
959
|
+
assert mq_decision.ok is False
|
|
960
|
+
|
|
961
|
+
merge = by_gate["merge"]
|
|
962
|
+
assert merge.ok is False
|
|
963
|
+
assert merge.reason != SMOKE_REQUIRED
|
|
964
|
+
assert merge.reason.startswith(SKIPPED_BLOCKED)
|
|
965
|
+
assert "SKIPPED" in merge.reason
|
|
966
|
+
|
|
967
|
+
text = format_gate_report(report)
|
|
968
|
+
assert "merge-queue : SKIPPED" in text
|
|
969
|
+
assert "smoke_required" not in text
|
|
970
|
+
|
|
971
|
+
def test_conflict_entry_does_not_outrank_smoke_required(
|
|
972
|
+
self, config: Config, coord_db,
|
|
973
|
+
) -> None:
|
|
974
|
+
"""CONFLICT is excluded from the headline override on purpose — it
|
|
975
|
+
self-heals via a `coord merge --only` retry (`dispatch_conflict_fix`,
|
|
976
|
+
#1474), so `smoke_required` stays the accurate headline reason."""
|
|
977
|
+
work = _work(test_state=None)
|
|
978
|
+
review = _review("w1", verdict="approve")
|
|
979
|
+
board = Board(active=[], completed=[work, review])
|
|
980
|
+
mq.save_queue([
|
|
981
|
+
mq.QueuedMerge(
|
|
982
|
+
assignment_id="w1", repo_name="api", repo_github="acme/api",
|
|
983
|
+
branch="issue-42-foo", target_branch="main", issue_number=42,
|
|
984
|
+
issue_title="t", state=mq.CONFLICT,
|
|
985
|
+
error="merge conflict in foo.py",
|
|
986
|
+
)
|
|
987
|
+
])
|
|
988
|
+
report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
|
|
989
|
+
|
|
990
|
+
by_gate = {d.gate: d for d in report.decisions}
|
|
991
|
+
assert by_gate["merge_queue"].state == "CONFLICT"
|
|
992
|
+
assert by_gate["merge_queue"].ok is False
|
|
993
|
+
assert by_gate["merge"].reason == SMOKE_REQUIRED
|
|
994
|
+
|
|
995
|
+
def test_multiple_rows_for_same_issue_picks_first_match_in_list_order(
|
|
996
|
+
self, config: Config, coord_db,
|
|
997
|
+
) -> None:
|
|
998
|
+
"""#3445 review: when more than one `merge_queue` row matches
|
|
999
|
+
`(repo_name, issue_number)` and none matches the winning work row's
|
|
1000
|
+
assignment id, `coord gates` must pick the SAME row every other
|
|
1001
|
+
`merge_queue` consumer would — `coord.drive_state._merge_entry`
|
|
1002
|
+
takes the first match in list order (oldest/lowest id), not the most
|
|
1003
|
+
recent, so this mirrors that instead of silently disagreeing with
|
|
1004
|
+
`coord drive-queue block-log`/`coord status`/`_decide_merge` about
|
|
1005
|
+
which row is "the" entry for this issue."""
|
|
1006
|
+
work = _work(test_state=None)
|
|
1007
|
+
review = _review("w1", verdict="approve")
|
|
1008
|
+
board = Board(active=[], completed=[work, review])
|
|
1009
|
+
mq.save_queue([
|
|
1010
|
+
mq.QueuedMerge(
|
|
1011
|
+
assignment_id="stale-aid", repo_name="api", repo_github="acme/api",
|
|
1012
|
+
branch="issue-42-old-branch", target_branch="main", issue_number=42,
|
|
1013
|
+
issue_title="t", state=mq.HUMAN_REQUIRED,
|
|
1014
|
+
error="first (older) row — left behind by a retarget",
|
|
1015
|
+
),
|
|
1016
|
+
mq.QueuedMerge(
|
|
1017
|
+
assignment_id="other-stale-aid", repo_name="api", repo_github="acme/api",
|
|
1018
|
+
branch="issue-42-newer-branch", target_branch="main", issue_number=42,
|
|
1019
|
+
issue_title="t", state=mq.PENDING,
|
|
1020
|
+
error="second (newer) row",
|
|
1021
|
+
),
|
|
1022
|
+
])
|
|
1023
|
+
report = build_gate_report(board, config, "api", 42, gh_ops=FakeGh())
|
|
1024
|
+
|
|
1025
|
+
by_gate = {d.gate: d for d in report.decisions}
|
|
1026
|
+
mq_decision = by_gate["merge_queue"]
|
|
1027
|
+
# Neither row's assignment_id matches the winning work row ("w1"),
|
|
1028
|
+
# so the fallback-by-assignment-id narrowing never kicks in — the
|
|
1029
|
+
# first (oldest) row in insertion order wins.
|
|
1030
|
+
assert mq_decision.assignment_id == "stale-aid"
|
|
1031
|
+
assert mq_decision.state == "HUMAN_REQUIRED"
|
|
1032
|
+
assert "first (older) row" in mq_decision.reason
|
|
1033
|
+
|
|
1034
|
+
|
|
827
1035
|
# ── is_interactive enrichment (#748/#632: not an Assignment dataclass field) ─
|
|
828
1036
|
|
|
829
1037
|
class TestIsInteractive:
|
|
@@ -220,7 +220,7 @@ SQLITE_CONNECT_ALLOWLIST: dict[str, Classification] = {
|
|
|
220
220
|
"it.",
|
|
221
221
|
),
|
|
222
222
|
"test_dr_verify.py": Classification(
|
|
223
|
-
|
|
223
|
+
5, (BUCKET_A,),
|
|
224
224
|
"#3119's DR-verify lane — the restore half of test_backup.py directly "
|
|
225
225
|
"above, and filed A for the same reason. All four sites build or "
|
|
226
226
|
"mutate a real on-disk SQLite *file* that is then snapshotted, "
|
|
@@ -239,6 +239,15 @@ SQLITE_CONNECT_ALLOWLIST: dict[str, Classification] = {
|
|
|
239
239
|
"restore it. (The zero-assignments parity case reuses "
|
|
240
240
|
"hollow_out_assignments() rather than opening its own connection, so "
|
|
241
241
|
"#3135 added one site, not two.) "
|
|
242
|
+
"+1 for #3451's _seed_recent_terminal_assignments(), which bulk-"
|
|
243
|
+
"inserts RECENT terminal rows past #1791's MAX_TERMINAL_ASSIGNMENTS "
|
|
244
|
+
"cardinality cap into a real on-disk file so the live side can be "
|
|
245
|
+
"pinned against a genuine /board TestClient response — the case "
|
|
246
|
+
"live_board_assignment_count silently skipped before this fix, "
|
|
247
|
+
"because #3135's retention window alone was not enough to trigger "
|
|
248
|
+
"the cap. Same file, same reason: it has to be an on-disk file "
|
|
249
|
+
"because the very next thing the test does is open it through both "
|
|
250
|
+
"SqliteStore(by path) and dr_verify.live_board_assignment_count(). "
|
|
242
251
|
"The autouse coord_db fixture cannot serve any of them — there "
|
|
243
252
|
"is no file to restic — and scratch_database() is out for the usual "
|
|
244
253
|
"backend-following reason: under COORD_TEST_BACKEND=postgres these "
|