code-coordinator 0.5.493__tar.gz → 0.5.495__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.493 → code_coordinator-0.5.495}/.github/workflows/test.yml +17 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/PKG-INFO +1 -1
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/board_schema.py +11 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/board_wire.py +57 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/drive_queue.py +290 -50
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/db.py +21 -1
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/drive_queue.py +35 -1
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/drive_state.py +8 -1
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/github_ops.py +8 -1
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/merge_queue.py +14 -6
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/state.py +11 -3
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_board_wire.py +169 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_drive_queue.py +156 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_db.py +4 -1
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive_queue.py +93 -2
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_github_ops.py +12 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_state.py +63 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/.gitignore +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/CLAUDE.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/GOAL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/LICENSE +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/MANIFEST.in +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/README.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/__init__.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/agent.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/audit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/backup.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/block_log.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/board_service.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/brain.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/claim.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/cli.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/client.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/codegen.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/comments.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/config.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dao.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/deps.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/drive.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/events.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/filelock.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/freshness.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/gates.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/goal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/context.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/models.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/render.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/health/units.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/hooks.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/interactive.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/models.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/network.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/notify.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/openapi.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/parentage.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/plans.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/progress.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/release_window.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/reports.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/review.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/self_health.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/smoke.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/split_work.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/sql.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/test_author.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/test_report.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/usage.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/install-agent.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/pyproject.toml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/setup.cfg +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/__init__.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/backends.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/conftest.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_client.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_config.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_events.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_init.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_models.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_network.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_review.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_session.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_split.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.493 → code_coordinator-0.5.495}/tests/write_parity.py +0 -0
|
@@ -5,6 +5,8 @@ on:
|
|
|
5
5
|
branches: [main]
|
|
6
6
|
pull_request:
|
|
7
7
|
branches: [main]
|
|
8
|
+
# #3392: the `postgres` job below is opt-in and runs ONLY from here.
|
|
9
|
+
workflow_dispatch:
|
|
8
10
|
|
|
9
11
|
jobs:
|
|
10
12
|
test:
|
|
@@ -371,6 +373,21 @@ jobs:
|
|
|
371
373
|
# what every other job's `pip install -e ".[dev]"` pulls in.
|
|
372
374
|
postgres:
|
|
373
375
|
runs-on: ubuntu-latest
|
|
376
|
+
# #3392, 2026-09-18: taken out of automatic CI by operator decision -- the
|
|
377
|
+
# Postgres migration is not current work, and until it is this job is pure
|
|
378
|
+
# noise. It gates nothing (`continue-on-error: true` below, and it is not a
|
|
379
|
+
# required check in branch protection), emits ~3700
|
|
380
|
+
# ProductionDatabaseGuardError that dominate every `--log-failed` read of
|
|
381
|
+
# this workflow, and costs 65-70 min of runner time per push to main. It
|
|
382
|
+
# misdirected #3378 item 1, #3380 and #3385 -- all three were scoped as
|
|
383
|
+
# "make main green" against a job that cannot redden main.
|
|
384
|
+
#
|
|
385
|
+
# RESTORE by deleting this one `if:` line when the migration becomes active
|
|
386
|
+
# work. Everything below is unchanged and still correct. Sequence then is:
|
|
387
|
+
# remove the `if:`, work the failure list down, THEN remove
|
|
388
|
+
# `continue-on-error` -- that last step is what turns this into a real gate
|
|
389
|
+
# and it is the deliberate END of that work, not the start.
|
|
390
|
+
if: github.event_name == 'workflow_dispatch'
|
|
374
391
|
continue-on-error: true
|
|
375
392
|
services:
|
|
376
393
|
postgres:
|
|
@@ -245,6 +245,17 @@ class BoardIssue:
|
|
|
245
245
|
synced_at: float | None = None
|
|
246
246
|
milestone_number: int | None = None
|
|
247
247
|
milestone_title: str | None = None
|
|
248
|
+
# #3384: GitHub's own `stateReason` — `"reopened"` when a human explicitly
|
|
249
|
+
# reopened this issue via `gh issue reopen`, `""` for an issue that has
|
|
250
|
+
# never been closed. See `coord.drive_queue.IssueFacts.reopened`.
|
|
251
|
+
#
|
|
252
|
+
# ABSENT, not `""`, on the wire when it is the empty default: it would
|
|
253
|
+
# otherwise cost ~20 bytes on every issue row of every poll to say nothing
|
|
254
|
+
# (`coord.board_wire._drop_default_state_reason`, which is also why it is
|
|
255
|
+
# not in this DTO's `required` list — it has a default). Read it as
|
|
256
|
+
# `row.get("state_reason") or ""`; the Rust side gets `#[serde(default)]`
|
|
257
|
+
# from `coord.codegen`.
|
|
258
|
+
state_reason: str = ""
|
|
248
259
|
|
|
249
260
|
|
|
250
261
|
@dataclasses.dataclass(kw_only=True)
|
|
@@ -65,6 +65,19 @@ Rust call site of ``OpenIssue.body`` / ``PipelineIssue.body`` first. So the
|
|
|
65
65
|
body now leaves the collection wire for open issues too, and
|
|
66
66
|
:func:`bound_issue_row` keeps only the machine-parsed *residue* a client
|
|
67
67
|
cannot re-fetch in time — see :data:`ALLOWED_GLOB_MARKER`.
|
|
68
|
+
|
|
69
|
+
**#3384: a defaulted flag costs its bytes on EVERY row.** The reopen witness
|
|
70
|
+
``issues.state_reason`` carries a value on the handful of rows GitHub
|
|
71
|
+
actually set one on, and the empty default on every other issue on the
|
|
72
|
+
board — and an empty-but-present key is ~20 bytes of wire per row per poll,
|
|
73
|
+
which on the #1791 guard's 3000-row seed is ~57 KB and pushed the payload
|
|
74
|
+
straight through :data:`BOARD_PAYLOAD_BYTE_BUDGET`. So the default is
|
|
75
|
+
dropped from the wire entirely (:func:`_drop_default_state_reason`) and the
|
|
76
|
+
key is present only when it says something. This is the same additive-only
|
|
77
|
+
convention the ``<field>_truncated`` flags already follow, and it is the
|
|
78
|
+
rule to apply to the NEXT defaulted field somebody adds to
|
|
79
|
+
``coord/board_schema.py``: an always-present default is a per-row tax on a
|
|
80
|
+
payload that is polled every few seconds and whose ETag never matches.
|
|
68
81
|
"""
|
|
69
82
|
|
|
70
83
|
from __future__ import annotations
|
|
@@ -253,9 +266,52 @@ def _machine_readable_residue(body: str) -> str:
|
|
|
253
266
|
)
|
|
254
267
|
|
|
255
268
|
|
|
269
|
+
def _drop_default_state_reason(row: dict) -> None:
|
|
270
|
+
"""#3384: drop ``state_reason`` from the wire when it is the empty default.
|
|
271
|
+
|
|
272
|
+
``issues.state_reason`` is GitHub's own ``stateReason``: ``"reopened"``
|
|
273
|
+
on an issue a human explicitly reopened, and ``''`` on every issue that
|
|
274
|
+
has never been closed — i.e. on essentially the whole board. Shipping
|
|
275
|
+
the empty default costs ~20 bytes on EVERY issue row of EVERY poll (~57 KB
|
|
276
|
+
on the #1791 guard's 3000-row seed, enough on its own to breach
|
|
277
|
+
:data:`BOARD_PAYLOAD_BYTE_BUDGET`) to tell a client something it already
|
|
278
|
+
assumes.
|
|
279
|
+
|
|
280
|
+
Safe because absent and empty are the SAME answer to every consumer, by
|
|
281
|
+
construction rather than by luck:
|
|
282
|
+
|
|
283
|
+
* ``coord.drive_queue.build_board_view`` reads it as
|
|
284
|
+
``str(row.get("state_reason") or "").lower() == "reopened"`` — the one
|
|
285
|
+
question anything asks of this field — so a missing key and an empty
|
|
286
|
+
one both yield ``IssueFacts.reopened is False``. That is also what
|
|
287
|
+
keeps this wire cut from splitting the answer in two: the daemon-host
|
|
288
|
+
local path (``coord.drive_state._local_issue_rows``, which never runs
|
|
289
|
+
through this module) still carries ``''``, and both paths land on the
|
|
290
|
+
identical fact.
|
|
291
|
+
* The Rust ``OpenIssue.state_reason`` is generated with
|
|
292
|
+
``#[serde(default)]`` (``coord.codegen._rust_auto_field``), so an
|
|
293
|
+
absent key deserializes to ``String::new()``.
|
|
294
|
+
* ``state_reason`` is not in ``BoardIssue``'s ``required`` list in
|
|
295
|
+
``/openapi.json`` (it has a dataclass default), so omitting it stays
|
|
296
|
+
inside the published contract.
|
|
297
|
+
|
|
298
|
+
A NON-empty value is always kept — this drops the default, it does not
|
|
299
|
+
filter for ``"reopened"`` specifically, so a value GitHub starts sending
|
|
300
|
+
that we do not yet interpret still reaches clients intact.
|
|
301
|
+
"""
|
|
302
|
+
if not row.get("state_reason"):
|
|
303
|
+
row.pop("state_reason", None)
|
|
304
|
+
|
|
305
|
+
|
|
256
306
|
def bound_issue_row(row: dict) -> None:
|
|
257
307
|
"""Apply the wire policy to one ``/board`` issue row (mutates).
|
|
258
308
|
|
|
309
|
+
**The empty ``state_reason`` default is dropped from every issue row**
|
|
310
|
+
(#3384), tracking issues included — see
|
|
311
|
+
:func:`_drop_default_state_reason`. Deliberately above the epic
|
|
312
|
+
early-return below, so the wire shape of that field does not depend on
|
|
313
|
+
which kind of issue a row happens to be.
|
|
314
|
+
|
|
259
315
|
**Tracking (epic) issues are exempt from the body cap.** The TUI's
|
|
260
316
|
Milestone DAG parses ``## Work order`` out of the tracking issue's body
|
|
261
317
|
*client-side* (`milestone_dag.rs::milestones_with_work_orders` — it does
|
|
@@ -282,6 +338,7 @@ def bound_issue_row(row: dict) -> None:
|
|
|
282
338
|
exactly as for a closed issue, which is what arms that hydration
|
|
283
339
|
(``pipeline.rs::issue_body_fetch_target``).
|
|
284
340
|
"""
|
|
341
|
+
_drop_default_state_reason(row)
|
|
285
342
|
if _is_tracking_issue(row):
|
|
286
343
|
return
|
|
287
344
|
if _is_closed_issue(row):
|
|
@@ -124,6 +124,7 @@ from coord.overlap_predict import (
|
|
|
124
124
|
|
|
125
125
|
if TYPE_CHECKING: # pragma: no cover — typing only
|
|
126
126
|
from coord.config import Config
|
|
127
|
+
from coord.merge_queue import QueuedMerge
|
|
127
128
|
|
|
128
129
|
log = logging.getLogger(__name__)
|
|
129
130
|
|
|
@@ -2814,13 +2815,21 @@ def _local_issue_rows() -> list[dict]:
|
|
|
2814
2815
|
|
|
2815
2816
|
Fail-soft: an unreadable/absent table degrades to ``[]``, which puts the
|
|
2816
2817
|
daemon host back on the assignment-only signals rather than aborting.
|
|
2818
|
+
|
|
2819
|
+
#3384: ``state_reason`` selected alongside ``state`` — this IS the
|
|
2820
|
+
``coord drive-queue tick`` daemon-host path, so without it
|
|
2821
|
+
``coord.drive_queue.IssueFacts.reopened`` would never populate on the
|
|
2822
|
+
one host that actually ticks the queue, and a reopened issue's stale
|
|
2823
|
+
``merged`` witness would keep short-circuiting entries straight to
|
|
2824
|
+
``done`` there regardless of the fix in ``build_board_view``.
|
|
2817
2825
|
"""
|
|
2818
2826
|
from coord import sql # noqa: PLC0415
|
|
2819
2827
|
from coord.db import get_connection # noqa: PLC0415
|
|
2820
2828
|
|
|
2821
2829
|
try:
|
|
2822
2830
|
rows = sql.execute(
|
|
2823
|
-
get_connection(),
|
|
2831
|
+
get_connection(),
|
|
2832
|
+
"SELECT repo_name, number, state, state_reason FROM issues",
|
|
2824
2833
|
).fetchall()
|
|
2825
2834
|
except Exception: # noqa: BLE001 — see the fail-soft note above
|
|
2826
2835
|
return []
|
|
@@ -4740,14 +4749,51 @@ def _run_merge_only_candidates(plan: TickPlan, config_path: Path | None) -> None
|
|
|
4740
4749
|
click.echo(f"merge-only: {reason}")
|
|
4741
4750
|
|
|
4742
4751
|
|
|
4752
|
+
# #3396: the `stage` this call site's escalations are recorded under —
|
|
4753
|
+
# mirrors `ROLL_PENDING_ALERT_STAGE`/`SELF_CORDON_ALERT_STAGE` above, but
|
|
4754
|
+
# keyed per-entry (the entry's own `(repo_name, issue_number)`) rather than a
|
|
4755
|
+
# single fleet-wide slot, since more than one branch can be `checks_stale` at
|
|
4756
|
+
# once. `_run_auto_revalidate_checks_stale`'s cleanup pass reads this same
|
|
4757
|
+
# constant back to find which open escalations are its own to dismiss.
|
|
4758
|
+
CHECKS_STALE_ALERT_STAGE = "checks_stale"
|
|
4759
|
+
|
|
4760
|
+
|
|
4761
|
+
def _record_checks_stale_escalation(entry: "QueuedMerge", *, reason: str) -> None:
|
|
4762
|
+
"""Write (or refresh) the durable, human-visible escalation for *entry*
|
|
4763
|
+
(#3396 item 2) — ``coord escalate list``/``coord escalate run`` and the
|
|
4764
|
+
TUI already surface this table for every other "needs a human" condition
|
|
4765
|
+
in this file; a `checks_stale` block that this tick cannot move forward
|
|
4766
|
+
on its own now reaches it too, instead of only ever reprinting the same
|
|
4767
|
+
diagnosis to the journal every ~3 minutes forever.
|
|
4768
|
+
|
|
4769
|
+
Best-effort: a write failure here must not take down the rest of the
|
|
4770
|
+
tick — the caller already echoed the reason to stdout, which is the
|
|
4771
|
+
floor this falls back to.
|
|
4772
|
+
"""
|
|
4773
|
+
try:
|
|
4774
|
+
from coord.state import record_drive_escalation # noqa: PLC0415
|
|
4775
|
+
|
|
4776
|
+
record_drive_escalation(
|
|
4777
|
+
entry.repo_name,
|
|
4778
|
+
entry.issue_number,
|
|
4779
|
+
stage=CHECKS_STALE_ALERT_STAGE,
|
|
4780
|
+
reason=reason,
|
|
4781
|
+
gate_readings=f"error={entry.error}" if entry.error else "gate: READY",
|
|
4782
|
+
proposed_command=(
|
|
4783
|
+
f"coord merge --only {entry.repo_name}#{entry.issue_number}"
|
|
4784
|
+
),
|
|
4785
|
+
assignment_id=entry.assignment_id,
|
|
4786
|
+
)
|
|
4787
|
+
except Exception as exc: # noqa: BLE001 — the stdout line is the floor
|
|
4788
|
+
click.echo(f" (could not record the checks_stale escalation: {exc})")
|
|
4789
|
+
|
|
4790
|
+
|
|
4743
4791
|
def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
4744
|
-
"""#2535:
|
|
4792
|
+
"""#2535: unattended remedy for merge-queue entries blocked SOLELY on
|
|
4745
4793
|
stale CI checks against an already-approved review — closing the gap
|
|
4746
4794
|
where nothing periodic ever looks at such an entry on an operator's
|
|
4747
|
-
behalf
|
|
4748
|
-
|
|
4749
|
-
blocked 2026-08-21 on nothing but 210 unrelated merges having landed
|
|
4750
|
-
since its CI last ran).
|
|
4795
|
+
behalf (the trigger: #2530's Gate-A PR #2534 sat blocked 2026-08-21 on
|
|
4796
|
+
nothing but 210 unrelated merges having landed since its CI last ran).
|
|
4751
4797
|
|
|
4752
4798
|
#3266: this used to auto-fire a ``gh run rerun`` (``CiStore.
|
|
4753
4799
|
rerun_for_pr``) for exactly this shape, up to ``MAX_CI_STALE_RERUNS`` —
|
|
@@ -4756,46 +4802,89 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
4756
4802
|
there too: a ``gh run rerun`` replays the SAME event payload against
|
|
4757
4803
|
the SAME base the stale checks already used, so it can never see a
|
|
4758
4804
|
base that has since moved — which is the ONLY thing a staleness
|
|
4759
|
-
reading means.
|
|
4760
|
-
full CI cycle (this repo's median: ~62 minutes) on a guaranteed no-op,
|
|
4761
|
-
twice, before the shared ``ci_stale_reruns`` budget parked the entry
|
|
4762
|
-
anyway (claude-coordinator#2972). Per this repo's "one question, one
|
|
4763
|
-
answer" rule, this tick and ``process()`` must agree on the same
|
|
4764
|
-
question ("should we auto-rerun CI for a checks_stale block?") — they
|
|
4765
|
-
now both answer "no, park and point at a rebase" identically, rather
|
|
4766
|
-
than this call site silently keeping the old answer #2197 already gave
|
|
4767
|
-
up on live. See ``MAX_CI_STALE_RERUNS``'s comment in
|
|
4805
|
+
reading means. See ``MAX_CI_STALE_RERUNS``'s comment in
|
|
4768
4806
|
``coord/merge_queue.py`` and ``ci_stale_reason``'s docstring for the
|
|
4769
|
-
full reasoning
|
|
4770
|
-
|
|
4771
|
-
check against the CURRENT base
|
|
4807
|
+
full reasoning. The actual remedy is a rebase onto the target branch
|
|
4808
|
+
followed by ``git push --force-with-lease`` — the only thing that
|
|
4809
|
+
produces a check against the CURRENT base.
|
|
4810
|
+
|
|
4811
|
+
#3396: from #2535 through #3266 this call site only ever *reported*
|
|
4812
|
+
that remedy — it never performed it, so a `checks_stale` entry whose
|
|
4813
|
+
owning `coord drive` session had already exhausted its merge attempts
|
|
4814
|
+
and exited had NOTHING left watching it: this tick re-diagnosed the
|
|
4815
|
+
same block every ~3 minutes, forever, and the stale-rebase worker
|
|
4816
|
+
that exists for exactly this shape (:func:`coord.conflict_fix.
|
|
4817
|
+
dispatch_conflict_fix` with ``stale_rebase=True``, #3349) was never
|
|
4818
|
+
dispatched. #3349 already wired that worker into
|
|
4819
|
+
``coord.notify``'s stalled-pipeline sweep (``merge_gate_checks_stale``),
|
|
4820
|
+
but that sweep only runs when ``coord notify`` is invoked and
|
|
4821
|
+
``pipeline.auto_dispatch_stalled`` is on — it is not this tick, which
|
|
4822
|
+
runs unconditionally every few minutes on the daemon host. Per this
|
|
4823
|
+
repo's "one question, one answer" rule this call site now reuses the
|
|
4824
|
+
IDENTICAL dispatcher rather than re-deriving the decision: a
|
|
4825
|
+
content-preserving rebase gets force-pushed and the merge queue picks
|
|
4826
|
+
it up on its own next attempt, with no operator action, exactly like
|
|
4827
|
+
the #1090 reference case in the issue. A rebase that turns out to
|
|
4828
|
+
conflict (or change content) still refuses and escalates — the
|
|
4829
|
+
worker's own narrow briefing (:func:`coord.conflict_fix.
|
|
4830
|
+
build_stale_rebase_briefing`) enforces that, not this call site.
|
|
4831
|
+
|
|
4832
|
+
Escalation (#3396 item 2): a candidate this function cannot move
|
|
4833
|
+
forward — a conflict-fix already tried and failed against this SAME
|
|
4834
|
+
error (:func:`coord.conflict_fix.has_prior_conflict_fix`), or dispatch
|
|
4835
|
+
itself declined (no capable/reachable machine, no ``repo_path``) — is
|
|
4836
|
+
recorded via :func:`coord.state.record_drive_escalation` under the
|
|
4837
|
+
entry's OWN ``(repo, issue)``, the same durable, human-visible table
|
|
4838
|
+
``coord escalate list``/``coord escalate run`` already serve for every
|
|
4839
|
+
other "needs a human" condition in this file (see
|
|
4840
|
+
``ROLL_PENDING_ALERT_REPO``/``SELF_CORDON_ALERT_REPO`` above for the
|
|
4841
|
+
established one-slot-per-condition pattern; this one is naturally
|
|
4842
|
+
keyed per-entry instead, since more than one branch can be
|
|
4843
|
+
``checks_stale`` at once). Before #3396 a block that "needs a human"
|
|
4844
|
+
only ever reached this function's own stdout/journal line, printed
|
|
4845
|
+
again unchanged every tick — never a place an operator or the TUI
|
|
4846
|
+
would actually see it (the issue's own complaint: `coord drive-queue
|
|
4847
|
+
status` reporting ``alert: (none)`` throughout). A candidate that
|
|
4848
|
+
clears on its own (the rebase lands, or the base stops moving) is no
|
|
4849
|
+
longer in the next tick's *candidates* list, so its escalation (if any)
|
|
4850
|
+
is dismissed below — the table only ever holds genuinely-live blocks.
|
|
4772
4851
|
|
|
4773
4852
|
Deliberately narrow — this is NOT ``merge.auto_drain`` reopened (that
|
|
4774
4853
|
flag stays ``False`` by design; see ``docs/DRIVE_QUEUE.md`` and the
|
|
4775
4854
|
2026-06-07 incident it guards against). This step never merges
|
|
4776
|
-
anything
|
|
4777
|
-
|
|
4778
|
-
|
|
4855
|
+
anything and never mutates the merge-queue row itself — it only ever
|
|
4856
|
+
dispatches the SAME bounded, self-refusing worker
|
|
4857
|
+
:func:`coord.conflict_fix.dispatch_conflict_fix` already provides
|
|
4858
|
+
for the identical shape reached from a live drive/stalled-pipeline
|
|
4859
|
+
sweep, gated by the SAME one-per-entry retry cap
|
|
4860
|
+
(:func:`coord.conflict_fix.has_prior_conflict_fix`) — so a second
|
|
4861
|
+
tick finding the same still-stale entry while a rebase attempt is
|
|
4862
|
+
already running/pending does nothing, and one that already failed
|
|
4863
|
+
escalates instead of retrying. It never touches an entry blocked on
|
|
4864
|
+
review, a real CI failure, or a conflict — only the exact shape
|
|
4865
|
+
:func:`coord.merge_queue.ci_revalidation_candidates` scopes
|
|
4779
4866
|
``--revalidate``'s (equally no-op) CI arm to (#1851/#1925): ``PENDING``,
|
|
4780
4867
|
review approved, smoke fresh, CI checks green but predating the current
|
|
4781
4868
|
base.
|
|
4782
4869
|
|
|
4783
4870
|
``MAX_CI_STALE_RERUNS``/``ci_stale_reruns`` are read nowhere in this
|
|
4784
|
-
function
|
|
4785
|
-
|
|
4786
|
-
|
|
4787
|
-
|
|
4788
|
-
|
|
4789
|
-
Cost-visible (#1632's posture)
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4871
|
+
function — nothing here increments or checks that budget, so a row
|
|
4872
|
+
already carrying a nonzero count from before #3266 is left exactly as
|
|
4873
|
+
``process()`` leaves it (converges to 0 on the next genuinely-fresh
|
|
4874
|
+
reading, never incremented further by this call site).
|
|
4875
|
+
|
|
4876
|
+
Cost-visible (#1632's posture): dispatching a worker is real, visible
|
|
4877
|
+
spend — a :func:`coord.audit.record_audit` (business tier) row marks
|
|
4878
|
+
it, distinct from the operational-tier rows for a declined/escalated
|
|
4879
|
+
candidate, so an operator watching the audit trail can tell "this tick
|
|
4880
|
+
spent a session" from "this tick only reported a block" at a glance.
|
|
4881
|
+
|
|
4882
|
+
Deliberately NOT behind a new config flag — the worker it dispatches
|
|
4883
|
+
already carries its own bounded, self-refusing briefing and one-shot
|
|
4884
|
+
retry cap; there is nothing further to gate that
|
|
4885
|
+
``pipeline.auto_dispatch_stalled`` (the flag guarding ``coord
|
|
4886
|
+
notify``'s unrelated, broader stalled-pipeline sweep) doesn't already
|
|
4887
|
+
cover for that other call site.
|
|
4799
4888
|
|
|
4800
4889
|
Best-effort like every other optional step in this tick (conflict
|
|
4801
4890
|
reconciliation in ``_auto_drain_tick``, the merge-only fast path above):
|
|
@@ -4803,6 +4892,24 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
4803
4892
|
on a thin client — this daemon-host tick is the only place it ever
|
|
4804
4893
|
runs, same guard :func:`_fetch_live_ci_gate`/
|
|
4805
4894
|
:func:`_run_merge_only_candidates` use.
|
|
4895
|
+
|
|
4896
|
+
Known race, widened by this change (#3396 review): this tick is a new,
|
|
4897
|
+
independent, ALWAYS-ON caller of ``dispatch_conflict_fix(...,
|
|
4898
|
+
stale_rebase=True)`` (``deploy/coord-drive-queue.service``/``.timer``),
|
|
4899
|
+
alongside ``coord notify``'s stalled-pipeline sweep (a separate systemd
|
|
4900
|
+
timer, see ``docs/AGENT_OPERATIONS.md``) and a live drive's own merge
|
|
4901
|
+
attempt — three independent callers for the identical shape now. The
|
|
4902
|
+
shared guard (``has_prior_conflict_fix``/``_has_active_conflict_fix``)
|
|
4903
|
+
is a plain board-snapshot read with no cross-process lock between them:
|
|
4904
|
+
if two of these fire within the same window for the same gate-READY
|
|
4905
|
+
``checks_stale`` entry, both can independently observe "no prior fix in
|
|
4906
|
+
flight" and dispatch a duplicate stale-rebase worker. Wasted spend, not
|
|
4907
|
+
data loss — the second worker's push is a no-op or is itself refused —
|
|
4908
|
+
but this is the first caller to fire unconditionally on a fixed timer
|
|
4909
|
+
rather than behind a live drive or an opt-in flag, which widens the
|
|
4910
|
+
window. A real fix needs a cross-process claim (e.g. a DB-level lock
|
|
4911
|
+
keyed on the entry) rather than a snapshot read; tracked as a follow-up,
|
|
4912
|
+
not fixed here.
|
|
4806
4913
|
"""
|
|
4807
4914
|
from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
|
|
4808
4915
|
|
|
@@ -4815,10 +4922,32 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
4815
4922
|
from coord.audit import record_audit # noqa: PLC0415
|
|
4816
4923
|
from coord.ci_store import build_ci_store # noqa: PLC0415
|
|
4817
4924
|
from coord.commands._common import _load_config # noqa: PLC0415
|
|
4818
|
-
from coord.
|
|
4925
|
+
from coord.conflict_fix import ( # noqa: PLC0415
|
|
4926
|
+
_has_active_conflict_fix,
|
|
4927
|
+
describe_conflict_fix_decline,
|
|
4928
|
+
dispatch_conflict_fix,
|
|
4929
|
+
has_prior_conflict_fix,
|
|
4930
|
+
)
|
|
4931
|
+
from coord.network import fetch_status # noqa: PLC0415
|
|
4932
|
+
from coord.state import ( # noqa: PLC0415
|
|
4933
|
+
dismiss_drive_escalation,
|
|
4934
|
+
list_drive_escalations,
|
|
4935
|
+
load_board as _load_board,
|
|
4936
|
+
)
|
|
4819
4937
|
|
|
4820
4938
|
cfg = _load_config(config_path)
|
|
4821
|
-
|
|
4939
|
+
# #3396: `load_board()` can legitimately return `None` (no board data
|
|
4940
|
+
# at all yet). `ci_revalidation_candidates` already tolerates that
|
|
4941
|
+
# (its gate reads never dereference a `None` board when the gate they
|
|
4942
|
+
# guard isn't required), but `has_prior_conflict_fix`/
|
|
4943
|
+
# `dispatch_conflict_fix` below unconditionally walk
|
|
4944
|
+
# `board.active`/`board.completed` — an empty board is the correct
|
|
4945
|
+
# "no prior assignments exist" reading for both, and keeps the two
|
|
4946
|
+
# calls sharing the exact same object rather than one seeing `None`
|
|
4947
|
+
# and the other a stand-in.
|
|
4948
|
+
from coord.models import Board # noqa: PLC0415
|
|
4949
|
+
|
|
4950
|
+
board = _load_board() or Board()
|
|
4822
4951
|
ci_store = build_ci_store(
|
|
4823
4952
|
cfg.ci_store.type, host=cfg.ci_store.host, token_env=cfg.ci_store.token_env,
|
|
4824
4953
|
)
|
|
@@ -4829,34 +4958,145 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
|
|
|
4829
4958
|
except Exception: # noqa: BLE001 — best-effort, see docstring
|
|
4830
4959
|
return
|
|
4831
4960
|
|
|
4961
|
+
# #3396 review: the cleanup pass below treats an escalation's absence
|
|
4962
|
+
# from *candidates* as "confirmed cleared" — that's only a safe reading
|
|
4963
|
+
# once we know `candidates` came from a REAL read, not from a
|
|
4964
|
+
# `ci_store` that was `None`/unavailable (which `ci_revalidation_
|
|
4965
|
+
# candidates` also answers with `[]`, indistinguishable by return value
|
|
4966
|
+
# alone from "genuinely nothing is stale"). The `ci_store.is_available`
|
|
4967
|
+
# check above, and the broader `except Exception: return` around this
|
|
4968
|
+
# whole block, both already `return` BEFORE this point on exactly that
|
|
4969
|
+
# ambiguous case — so reaching here at all already means the read was
|
|
4970
|
+
# real. Do not restructure this so cleanup can be reached without a
|
|
4971
|
+
# confirmed-available `ci_store` and a `ci_revalidation_candidates` call
|
|
4972
|
+
# that returned normally; that reintroduces the "unconfirmed success"
|
|
4973
|
+
# bug this comment describes (epic #2096: dismissing an escalation is
|
|
4974
|
+
# asserting "resolved" — only do it from an observation, not an
|
|
4975
|
+
# inability to look).
|
|
4976
|
+
#
|
|
4977
|
+
# #3396: drop any prior checks_stale escalation for an entry that is no
|
|
4978
|
+
# longer a candidate this tick — either it landed, or the base stopped
|
|
4979
|
+
# moving. Runs even when *candidates* is empty (that's the fully-healed
|
|
4980
|
+
# case). Best-effort: a read/write hiccup here must not stop the actual
|
|
4981
|
+
# dispatch loop below from running.
|
|
4982
|
+
try:
|
|
4983
|
+
live_keys = {(c.repo_name, c.issue_number) for c in candidates}
|
|
4984
|
+
for esc in list_drive_escalations():
|
|
4985
|
+
if esc.get("stage") != CHECKS_STALE_ALERT_STAGE:
|
|
4986
|
+
continue
|
|
4987
|
+
key = (esc.get("repo_name"), esc.get("issue_number"))
|
|
4988
|
+
if key not in live_keys:
|
|
4989
|
+
dismiss_drive_escalation(esc["repo_name"], esc["issue_number"])
|
|
4990
|
+
except Exception: # noqa: BLE001 — best-effort, see docstring
|
|
4991
|
+
pass
|
|
4992
|
+
|
|
4832
4993
|
if not candidates:
|
|
4833
4994
|
return
|
|
4834
4995
|
|
|
4835
4996
|
for entry in candidates:
|
|
4836
4997
|
label = f"{entry.repo_name} #{entry.issue_number} ({entry.branch})"
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4998
|
+
|
|
4999
|
+
if has_prior_conflict_fix(board, entry.assignment_id, current_error=entry.error):
|
|
5000
|
+
if _has_active_conflict_fix(board, entry.assignment_id):
|
|
5001
|
+
# A stale-rebase attempt is already running/pending for this
|
|
5002
|
+
# entry (dispatched by this same tick earlier, a live drive,
|
|
5003
|
+
# or the `coord notify` sweep) — nothing to do, and nothing
|
|
5004
|
+
# to escalate: it will resolve, or fail and escalate, on its
|
|
5005
|
+
# own.
|
|
5006
|
+
click.echo(
|
|
5007
|
+
f"auto-revalidate: {label} is checks_stale — a "
|
|
5008
|
+
"stale-rebase conflict-fix is already in flight for it"
|
|
5009
|
+
)
|
|
5010
|
+
continue
|
|
5011
|
+
# A prior stale-rebase (or ordinary conflict-fix) attempt for
|
|
5012
|
+
# this SAME error already failed — the retry cap is spent, and
|
|
5013
|
+
# re-diagnosing it every tick forever is exactly the #3396 bug.
|
|
5014
|
+
# Escalate once into the durable table instead of only echoing.
|
|
5015
|
+
reason = (
|
|
5016
|
+
f"{label} is checks_stale and a prior conflict-fix attempt "
|
|
5017
|
+
"already failed against this same block — a CI re-run "
|
|
5018
|
+
"cannot clear it (same base) and the automatic rebase "
|
|
5019
|
+
"already gave up; needs a human"
|
|
5020
|
+
)
|
|
5021
|
+
click.echo(f"auto-revalidate: {reason}")
|
|
5022
|
+
record_audit(
|
|
5023
|
+
tier="operational", category="merge",
|
|
5024
|
+
event_type="merge_checks_stale_human_required",
|
|
5025
|
+
actor="drive-queue-tick",
|
|
5026
|
+
summary=reason,
|
|
5027
|
+
repo=entry.repo_name, issue=entry.issue_number,
|
|
5028
|
+
assignment_id=entry.assignment_id,
|
|
5029
|
+
details={"pr_number": entry.pr_number, "error": entry.error},
|
|
5030
|
+
)
|
|
5031
|
+
_record_checks_stale_escalation(entry, reason=reason)
|
|
5032
|
+
continue
|
|
5033
|
+
|
|
5034
|
+
pick_out: list = []
|
|
5035
|
+
fix = dispatch_conflict_fix(
|
|
5036
|
+
entry, board, cfg, stale_rebase=True,
|
|
5037
|
+
status_fetcher=fetch_status, machine_pick_out=pick_out,
|
|
5038
|
+
)
|
|
5039
|
+
if fix is not None:
|
|
5040
|
+
click.echo(
|
|
5041
|
+
f"auto-revalidate: {label} is checks_stale — dispatched a "
|
|
5042
|
+
f"stale-rebase conflict-fix ({fix.assignment_id}) to "
|
|
5043
|
+
f"{fix.machine_name} (#3396: no live drive needed)"
|
|
5044
|
+
)
|
|
5045
|
+
record_audit(
|
|
5046
|
+
tier="business", category="merge",
|
|
5047
|
+
event_type="merge_checks_stale_auto_rebase_dispatched",
|
|
5048
|
+
actor="drive-queue-tick",
|
|
5049
|
+
summary=(
|
|
5050
|
+
f"stale-rebase conflict-fix dispatched: {label} → "
|
|
5051
|
+
f"{fix.machine_name}"
|
|
5052
|
+
),
|
|
5053
|
+
repo=entry.repo_name, issue=entry.issue_number,
|
|
5054
|
+
assignment_id=fix.assignment_id,
|
|
5055
|
+
details={
|
|
5056
|
+
"pr_number": entry.pr_number,
|
|
5057
|
+
"merge_entry_id": entry.assignment_id,
|
|
5058
|
+
},
|
|
5059
|
+
)
|
|
5060
|
+
# #3396 review: an earlier tick may have already written a
|
|
5061
|
+
# `checks_stale` escalation for this SAME entry (dispatch
|
|
5062
|
+
# declined that time — no machine, no repo_path) before a later
|
|
5063
|
+
# tick found dispatch available and actually fired the worker.
|
|
5064
|
+
# Without this, `coord escalate list`/the TUI keep showing
|
|
5065
|
+
# "needs a human" for an entry that in fact now has a
|
|
5066
|
+
# stale-rebase worker actively running against it, until it
|
|
5067
|
+
# eventually drops out of `candidates` entirely. Best-effort —
|
|
5068
|
+
# a dismissal failure here must not undo the dispatch above.
|
|
5069
|
+
try:
|
|
5070
|
+
dismiss_drive_escalation(entry.repo_name, entry.issue_number)
|
|
5071
|
+
except Exception: # noqa: BLE001 — best-effort, see docstring
|
|
5072
|
+
pass
|
|
5073
|
+
continue
|
|
5074
|
+
|
|
5075
|
+
# Dispatch declined before ever starting a rebase — no capable or
|
|
5076
|
+
# reachable machine, no `repo_path` configured, or a flapping agent
|
|
5077
|
+
# (#3353). Still `checks_stale`, still gate-ready, and still nobody
|
|
5078
|
+
# is going to clear it on its own — surface it the same durable way
|
|
5079
|
+
# a genuine retry-cap exhaustion does, rather than a print-only line
|
|
5080
|
+
# nothing but the journal ever sees.
|
|
5081
|
+
decline_reason = describe_conflict_fix_decline(pick_out)
|
|
5082
|
+
reason = (
|
|
5083
|
+
f"{label} is checks_stale with a content-preserving rebase "
|
|
5084
|
+
f"expected to clear it, but dispatch declined: {decline_reason}"
|
|
4846
5085
|
)
|
|
5086
|
+
click.echo(f"auto-revalidate: {reason}")
|
|
4847
5087
|
record_audit(
|
|
4848
5088
|
tier="operational", category="merge",
|
|
4849
5089
|
event_type="merge_checks_stale_parked",
|
|
4850
5090
|
actor="drive-queue-tick",
|
|
4851
5091
|
summary=(
|
|
4852
5092
|
f"checks_stale: {label} needs a rebase, not a CI re-run "
|
|
4853
|
-
"(#3266)
|
|
4854
|
-
"staleness"
|
|
5093
|
+
f"(#3266); auto-dispatch declined: {decline_reason} (#3396)"
|
|
4855
5094
|
),
|
|
4856
5095
|
repo=entry.repo_name, issue=entry.issue_number,
|
|
4857
5096
|
assignment_id=entry.assignment_id,
|
|
4858
|
-
details={"pr_number": entry.pr_number},
|
|
5097
|
+
details={"pr_number": entry.pr_number, "decline_reason": decline_reason},
|
|
4859
5098
|
)
|
|
5099
|
+
_record_checks_stale_escalation(entry, reason=reason)
|
|
4860
5100
|
|
|
4861
5101
|
|
|
4862
5102
|
def _run_resume_probe(entry: QueueEntry) -> ProbeResult:
|
|
@@ -1049,7 +1049,16 @@ def retry_on_locked(
|
|
|
1049
1049
|
# ("confirmed"/"unconfirmed"/"refuted"/"baseline_red") for a `test_state`
|
|
1050
1050
|
# write, alongside `coord.state._record_test_verdict_local`. See
|
|
1051
1051
|
# coord.models.Assignment.test_confirmation.
|
|
1052
|
-
|
|
1052
|
+
#
|
|
1053
|
+
# #3384: bumped 18 -> 19 for the new `issues.state_reason` column appended
|
|
1054
|
+
# to `_migrate_add_columns` below — carries GitHub's own `stateReason`
|
|
1055
|
+
# (`"reopened"` when a human explicitly reopened a closed issue) so
|
|
1056
|
+
# `coord.drive_queue.IssueFacts.reopened`/`.landed` can tell "this issue was
|
|
1057
|
+
# reopened for incomplete work" apart from "this issue never closed in the
|
|
1058
|
+
# first place" (a quadraui-style merge into a non-default branch) — both
|
|
1059
|
+
# read identically as `merged=True, issue_state="open"` otherwise. See
|
|
1060
|
+
# `coord.drive_queue.IssueFacts.landed`'s docstring.
|
|
1061
|
+
_DB_SCHEMA_VERSION = 19
|
|
1053
1062
|
|
|
1054
1063
|
|
|
1055
1064
|
def _read_schema_version(conn: sqlite3.Connection) -> int:
|
|
@@ -2490,6 +2499,17 @@ _MIGRATE_ADD_COLUMNS: list[str] = [
|
|
|
2490
2499
|
# See coord.models.Assignment.test_confirmation and
|
|
2491
2500
|
# coord.confirm_test.TEST_CONFIRMATION_VALUES for the exhaustive set.
|
|
2492
2501
|
"ALTER TABLE assignments ADD COLUMN test_confirmation TEXT",
|
|
2502
|
+
# #3384: GitHub's own `stateReason` for this issue — `''`/NULL for every
|
|
2503
|
+
# row predating this migration and for an issue that has never closed,
|
|
2504
|
+
# `"reopened"` (lowercased on write — see
|
|
2505
|
+
# `coord.state._upsert_open_issues_local`) when a human explicitly
|
|
2506
|
+
# reopened a previously-closed issue via `gh issue reopen`. This is the
|
|
2507
|
+
# ONLY witness that lets `coord.drive_queue.IssueFacts.landed` tell a
|
|
2508
|
+
# genuine reopen (the work is NOT done, no matter what an earlier PR
|
|
2509
|
+
# merge recorded) apart from a quadraui-style repo whose merged PRs never
|
|
2510
|
+
# auto-close the linked issue at all — both look identical as
|
|
2511
|
+
# `merged=True, issue_state="open"` without it.
|
|
2512
|
+
"ALTER TABLE issues ADD COLUMN state_reason TEXT NOT NULL DEFAULT ''",
|
|
2493
2513
|
]
|
|
2494
2514
|
|
|
2495
2515
|
|