code-coordinator 0.5.494__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.494 → code_coordinator-0.5.495}/.github/workflows/test.yml +17 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/PKG-INFO +1 -1
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/board_schema.py +11 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/board_wire.py +57 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/drive_queue.py +9 -1
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/db.py +21 -1
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/drive_queue.py +35 -1
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/drive_state.py +8 -1
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/github_ops.py +8 -1
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/state.py +11 -3
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_wire.py +169 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_db.py +4 -1
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue.py +93 -2
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_github_ops.py +12 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_state.py +63 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/.gitignore +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/CLAUDE.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/GOAL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/LICENSE +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/MANIFEST.in +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/README.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/__init__.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agent.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/audit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/backup.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/block_log.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/board_service.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/brain.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/claim.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/cli.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/client.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/codegen.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/comments.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/config.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dao.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/deps.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/drive.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/events.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/filelock.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/freshness.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gates.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/goal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/context.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/models.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/render.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/health/units.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/hooks.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/interactive.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/models.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/network.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/notify.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/openapi.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/parentage.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/plans.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/progress.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/release_window.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/reports.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/review.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/self_health.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/smoke.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/split_work.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/sql.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/test_author.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/test_report.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/usage.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/install-agent.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/pyproject.toml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/setup.cfg +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/__init__.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/backends.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/conftest.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_client.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_events.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_init.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_models.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_network.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_session.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_split.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.494 → code_coordinator-0.5.495}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.494 → 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):
|
|
@@ -2815,13 +2815,21 @@ def _local_issue_rows() -> list[dict]:
|
|
|
2815
2815
|
|
|
2816
2816
|
Fail-soft: an unreadable/absent table degrades to ``[]``, which puts the
|
|
2817
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``.
|
|
2818
2825
|
"""
|
|
2819
2826
|
from coord import sql # noqa: PLC0415
|
|
2820
2827
|
from coord.db import get_connection # noqa: PLC0415
|
|
2821
2828
|
|
|
2822
2829
|
try:
|
|
2823
2830
|
rows = sql.execute(
|
|
2824
|
-
get_connection(),
|
|
2831
|
+
get_connection(),
|
|
2832
|
+
"SELECT repo_name, number, state, state_reason FROM issues",
|
|
2825
2833
|
).fetchall()
|
|
2826
2834
|
except Exception: # noqa: BLE001 — see the fail-soft note above
|
|
2827
2835
|
return []
|
|
@@ -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
|
|
|
@@ -1194,6 +1194,19 @@ class IssueFacts:
|
|
|
1194
1194
|
# see `issue_cache_stale` for the ONE thing this changes.
|
|
1195
1195
|
issue_synced_at: float | None = None
|
|
1196
1196
|
merged: bool = False # a work-like assignment with status == 'merged'
|
|
1197
|
+
# #3384: GitHub's own witness that a human explicitly reopened this
|
|
1198
|
+
# issue (`stateReason == "reopened"` off `gh issue list`/`get_open_
|
|
1199
|
+
# issues`) — `False` for an issue that has simply never been closed.
|
|
1200
|
+
# `merged` above is a permanent historical record: once any work-like
|
|
1201
|
+
# assignment for this issue reaches `status == "merged"` it never
|
|
1202
|
+
# un-merges, even after the issue is reopened for incomplete work
|
|
1203
|
+
# (claude-coordinator#3384 — a PR merged with its goal unmet, reopened,
|
|
1204
|
+
# and a freshly re-queued entry still short-circuited straight to
|
|
1205
|
+
# `done` on the strength of that stale record). `reopened` is what lets
|
|
1206
|
+
# `landed` below tell that apart from quadraui-style repos whose merged
|
|
1207
|
+
# PRs never auto-close the linked issue at all — both otherwise read
|
|
1208
|
+
# identically as `merged=True, issue_state="open"`.
|
|
1209
|
+
reopened: bool = False
|
|
1197
1210
|
active_work: bool = False # a NON-terminal work-like assignment
|
|
1198
1211
|
# #3239: a work-like assignment with status == 'done' — completed
|
|
1199
1212
|
# successfully but not yet merged (still owed Test/Review/Merge). Unlike
|
|
@@ -1315,8 +1328,25 @@ class IssueFacts:
|
|
|
1315
1328
|
rows the merge projection can miss, and quadraui-style repos can merge
|
|
1316
1329
|
a PR into ``develop`` while the linked issue stays open — so neither
|
|
1317
1330
|
signal alone is reliable.
|
|
1331
|
+
|
|
1332
|
+
#3384: `reopened` is the one override neither of those signals sees.
|
|
1333
|
+
`closed` wins outright whenever it is true — a merge that legitimately
|
|
1334
|
+
re-closed a reopened issue is done, full stop. But when the issue is
|
|
1335
|
+
currently OPEN and carries GitHub's own "a human explicitly reopened
|
|
1336
|
+
this" witness, a bare `merged` reading must NOT count: it is provably
|
|
1337
|
+
stale — the very act of reopening is an operator's statement that an
|
|
1338
|
+
earlier merge did not finish the work, and trusting the merge record
|
|
1339
|
+
over it is claude-coordinator#3380's incident replayed (a PR merged
|
|
1340
|
+
with its goal unmet, reopened, and every entry gated `--after` it
|
|
1341
|
+
released anyway). An issue that has simply never closed (the
|
|
1342
|
+
quadraui case above) never sets `reopened`, so this changes nothing
|
|
1343
|
+
for it.
|
|
1318
1344
|
"""
|
|
1319
|
-
|
|
1345
|
+
if self.closed:
|
|
1346
|
+
return True
|
|
1347
|
+
if self.reopened:
|
|
1348
|
+
return False
|
|
1349
|
+
return self.merged
|
|
1320
1350
|
|
|
1321
1351
|
|
|
1322
1352
|
def _issue_cache_stale(facts: IssueFacts, now: float | None) -> bool:
|
|
@@ -1435,6 +1465,10 @@ def build_board_view(
|
|
|
1435
1465
|
synced_at = row.get("synced_at")
|
|
1436
1466
|
if isinstance(synced_at, (int, float)):
|
|
1437
1467
|
entry["issue_synced_at"] = float(synced_at)
|
|
1468
|
+
# #3384: GitHub's own witness that this issue was explicitly
|
|
1469
|
+
# reopened — see `IssueFacts.reopened`'s docstring for why `merged`
|
|
1470
|
+
# alone cannot be trusted once this is set.
|
|
1471
|
+
entry["reopened"] = str(row.get("state_reason") or "").lower() == "reopened"
|
|
1438
1472
|
|
|
1439
1473
|
# #1891: `merge_ci_pending` — mirrors `drive_state._merge_entry`'s OWN
|
|
1440
1474
|
# reason resolution exactly (live `merge_plan` reason, falling back to
|
|
@@ -1125,6 +1125,13 @@ def _local_issue_rows() -> list[dict]:
|
|
|
1125
1125
|
which guards this SELECT and the HTTP shape against drifting apart
|
|
1126
1126
|
again.
|
|
1127
1127
|
|
|
1128
|
+
#3384: ``state_reason`` added alongside the rest — what
|
|
1129
|
+
``coord.drive_queue.build_board_view`` needs to populate
|
|
1130
|
+
``IssueFacts.reopened``, without which a reopened issue's stale
|
|
1131
|
+
``merged`` witness would keep reading as ``landed`` on this exact
|
|
1132
|
+
daemon-host path forever (the one that runs every real
|
|
1133
|
+
``coord drive-queue tick``).
|
|
1134
|
+
|
|
1128
1135
|
Deliberately queries ``get_connection()`` rather than
|
|
1129
1136
|
``coord.dao.SqliteStore`` — see :meth:`BoardFetcher._fetch_local`'s
|
|
1130
1137
|
docstring for why the latter is wrong for anything running in-process
|
|
@@ -1141,7 +1148,7 @@ def _local_issue_rows() -> list[dict]:
|
|
|
1141
1148
|
rows = sql.execute(
|
|
1142
1149
|
get_connection(),
|
|
1143
1150
|
"SELECT repo_name, number, title, state, milestone_number, "
|
|
1144
|
-
"milestone_title, labels, body, synced_at FROM issues",
|
|
1151
|
+
"milestone_title, labels, body, synced_at, state_reason FROM issues",
|
|
1145
1152
|
).fetchall()
|
|
1146
1153
|
except Exception: # noqa: BLE001 — see the fail-soft note above
|
|
1147
1154
|
return []
|
|
@@ -701,6 +701,13 @@ def get_open_issues(repo: str, *, force_through_backoff: bool = False) -> list[d
|
|
|
701
701
|
_sync_issues_tick`` once ``coord.issues_sync_status.is_starved(repo)``
|
|
702
702
|
says this repo has gone too long without a successful sync — see
|
|
703
703
|
:func:`coord.github_ops._gh`'s docstring for what it actually changes.
|
|
704
|
+
|
|
705
|
+
#3384: ``stateReason`` is requested alongside the rest — GitHub sets it
|
|
706
|
+
to ``"reopened"`` on an issue a human explicitly reopened via ``gh issue
|
|
707
|
+
reopen`` (and leaves it ``null`` for an issue that has simply never been
|
|
708
|
+
closed). ``coord.state._upsert_open_issues_local`` persists it so
|
|
709
|
+
``coord.drive_queue.IssueFacts.landed`` can refuse to treat a reopened
|
|
710
|
+
issue as done on the strength of a stale merge record.
|
|
704
711
|
"""
|
|
705
712
|
# #658: raised from 100 → 500 so repos with many open issues don't silently
|
|
706
713
|
# skip old issue numbers during coord sync. GitHub paginates the REST list
|
|
@@ -708,7 +715,7 @@ def get_open_issues(repo: str, *, force_through_backoff: bool = False) -> list[d
|
|
|
708
715
|
# repo — acceptable for a background sync.
|
|
709
716
|
return _gh_json(
|
|
710
717
|
"issue", "list", "--repo", repo, "--state", "open",
|
|
711
|
-
"--json", "number,title,labels,milestone,body,assignees",
|
|
718
|
+
"--json", "number,title,labels,milestone,body,assignees,stateReason",
|
|
712
719
|
"--limit", "500",
|
|
713
720
|
default=[],
|
|
714
721
|
force_through_backoff=force_through_backoff, caller="github_ops.get_open_issues")
|
|
@@ -7705,11 +7705,17 @@ def _upsert_open_issues_local(repo_name: str, issues: list[dict]) -> None:
|
|
|
7705
7705
|
milestone = issue.get("milestone") or {}
|
|
7706
7706
|
milestone_number = milestone.get("number") if milestone else None
|
|
7707
7707
|
milestone_title = milestone.get("title") if milestone else None
|
|
7708
|
+
# #3384: `gh issue list --json stateReason` — `"reopened"` when a
|
|
7709
|
+
# human explicitly reopened this issue, `""`/null for an issue that
|
|
7710
|
+
# has simply never been closed. Lowercased on write so
|
|
7711
|
+
# `coord.drive_queue.build_board_view`'s `== "reopened"` compare
|
|
7712
|
+
# never has to guess GitHub's casing.
|
|
7713
|
+
state_reason = str(issue.get("stateReason") or "").lower()
|
|
7708
7714
|
sql.execute(conn,
|
|
7709
7715
|
"""
|
|
7710
7716
|
INSERT INTO issues (repo_name, number, title, body, state, labels, synced_at,
|
|
7711
|
-
milestone_number, milestone_title)
|
|
7712
|
-
VALUES (?, ?, ?, ?, 'open', ?, ?, ?, ?)
|
|
7717
|
+
milestone_number, milestone_title, state_reason)
|
|
7718
|
+
VALUES (?, ?, ?, ?, 'open', ?, ?, ?, ?, ?)
|
|
7713
7719
|
ON CONFLICT (repo_name, number) DO UPDATE SET
|
|
7714
7720
|
title = excluded.title,
|
|
7715
7721
|
body = excluded.body,
|
|
@@ -7717,7 +7723,8 @@ def _upsert_open_issues_local(repo_name: str, issues: list[dict]) -> None:
|
|
|
7717
7723
|
labels = excluded.labels,
|
|
7718
7724
|
synced_at = excluded.synced_at,
|
|
7719
7725
|
milestone_number = excluded.milestone_number,
|
|
7720
|
-
milestone_title = excluded.milestone_title
|
|
7726
|
+
milestone_title = excluded.milestone_title,
|
|
7727
|
+
state_reason = excluded.state_reason
|
|
7721
7728
|
""",
|
|
7722
7729
|
(
|
|
7723
7730
|
repo_name,
|
|
@@ -7728,6 +7735,7 @@ def _upsert_open_issues_local(repo_name: str, issues: list[dict]) -> None:
|
|
|
7728
7735
|
now,
|
|
7729
7736
|
milestone_number,
|
|
7730
7737
|
milestone_title,
|
|
7738
|
+
state_reason,
|
|
7731
7739
|
),
|
|
7732
7740
|
)
|
|
7733
7741
|
# #603: the per-issue context digest is short-lived — drop it for any issue
|
|
@@ -395,3 +395,172 @@ def test_active_work_never_dropped_regardless_of_terminal_history_size(
|
|
|
395
395
|
issue = next(i for i in board["issues"] if i["number"] == 99999)
|
|
396
396
|
assert issue["state"] == "open"
|
|
397
397
|
assert issue["body"] == "the open body" # open issue body untouched by the closed-body drop
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
# ── #3384: the reopen witness must survive the wire's byte policy ──────────
|
|
401
|
+
#
|
|
402
|
+
# `issues.state_reason` (GitHub's own `stateReason`) is the ONLY witness that
|
|
403
|
+
# lets `coord.drive_queue.IssueFacts.landed` tell "a human reopened this
|
|
404
|
+
# issue because the merged PR did not finish the work" apart from "this repo
|
|
405
|
+
# merges into develop and never auto-closes the issue" — both otherwise read
|
|
406
|
+
# as `merged=True, issue_state="open"`. It is also a defaulted field on every
|
|
407
|
+
# one of the board's ~800 issue rows, which is ~20 bytes each, per poll: on
|
|
408
|
+
# the 3000-row seed above, 57 KB, enough on its own to breach
|
|
409
|
+
# BOARD_PAYLOAD_BYTE_BUDGET. `bound_issue_row` therefore drops the EMPTY
|
|
410
|
+
# default from the wire and keeps every non-empty value.
|
|
411
|
+
#
|
|
412
|
+
# These guard both halves at once — the cheap shape (the default is gone) and
|
|
413
|
+
# the expensive one that actually matters (a real reopen still reaches the
|
|
414
|
+
# consumer, over the real HTTP wire, and still flips `landed` to False). A
|
|
415
|
+
# byte-saving cut that silently took the witness with it would pass the
|
|
416
|
+
# budget guard above and re-open #3384; it fails here instead.
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
def _board_over_http(db_path: Path, cfg_path: Path) -> dict:
|
|
420
|
+
cfg = load_config(cfg_path)
|
|
421
|
+
app = build_app(SqliteStore(db_path), cfg)
|
|
422
|
+
with TestClient(app) as cli:
|
|
423
|
+
resp = cli.get("/board")
|
|
424
|
+
assert resp.status_code == 200
|
|
425
|
+
return resp.json()
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
def _seed_reopened_and_control(conn: sqlite3.Connection) -> None:
|
|
429
|
+
"""One issue merged-then-reopened, one merged-and-never-closed control.
|
|
430
|
+
|
|
431
|
+
Both carry a merged work assignment, so `IssueFacts.merged` is True for
|
|
432
|
+
each and `state_reason` is the ONLY thing that can tell them apart.
|
|
433
|
+
"""
|
|
434
|
+
conn.executemany(
|
|
435
|
+
"INSERT INTO assignments (assignment_id, machine_name, repo_name, "
|
|
436
|
+
"issue_number, issue_title, status, type, dispatched_at, finished_at) "
|
|
437
|
+
"VALUES (?,?,?,?,?,?,?,?,?)",
|
|
438
|
+
[
|
|
439
|
+
("a-reopened", "m", "api", 3380, "reopened", "merged", "work", NOW, NOW),
|
|
440
|
+
("a-control", "m", "api", 3381, "never closed", "merged", "work", NOW, NOW),
|
|
441
|
+
],
|
|
442
|
+
)
|
|
443
|
+
conn.executemany(
|
|
444
|
+
"INSERT INTO issues (repo_name, number, title, body, state, labels, "
|
|
445
|
+
"synced_at, state_reason) VALUES (?,?,?,?,?,?,?,?)",
|
|
446
|
+
[
|
|
447
|
+
("api", 3380, "reopened", "", "open", "[]", NOW, "reopened"),
|
|
448
|
+
("api", 3381, "never closed", "", "open", "[]", NOW, ""),
|
|
449
|
+
],
|
|
450
|
+
)
|
|
451
|
+
conn.commit()
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
def test_bound_issue_row_drops_the_empty_state_reason_default() -> None:
|
|
455
|
+
"""The byte cut: an empty `state_reason` leaves the wire entirely rather
|
|
456
|
+
than shipping `""` on every issue row of every poll."""
|
|
457
|
+
row = {"state": "open", "body": "", "state_reason": ""}
|
|
458
|
+
bound_issue_row(row)
|
|
459
|
+
assert "state_reason" not in row
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
def test_bound_issue_row_keeps_a_reopened_state_reason() -> None:
|
|
463
|
+
"""...and the witness itself is never the thing that gets cut."""
|
|
464
|
+
row = {"state": "open", "body": "", "state_reason": "reopened"}
|
|
465
|
+
bound_issue_row(row)
|
|
466
|
+
assert row["state_reason"] == "reopened"
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
def test_bound_issue_row_keeps_a_state_reason_it_does_not_interpret() -> None:
|
|
470
|
+
"""The cut drops the DEFAULT, not "anything that isn't 'reopened'" — a
|
|
471
|
+
value GitHub starts sending that coord has no opinion about still reaches
|
|
472
|
+
clients intact."""
|
|
473
|
+
row = {"state": "closed", "body": "", "state_reason": "not_planned"}
|
|
474
|
+
bound_issue_row(row)
|
|
475
|
+
assert row["state_reason"] == "not_planned"
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
def test_state_reason_policy_is_the_same_for_a_tracking_issue() -> None:
|
|
479
|
+
"""Epics take an early return out of `bound_issue_row` for the body cap
|
|
480
|
+
(#1791/#1939); the `state_reason` policy is applied above it, so the wire
|
|
481
|
+
shape of that field does not depend on which kind of issue a row is."""
|
|
482
|
+
from coord.milestone_order import TRACKING_ISSUE_LABEL
|
|
483
|
+
|
|
484
|
+
epic = {"state": "open", "body": "x", "labels": [TRACKING_ISSUE_LABEL],
|
|
485
|
+
"state_reason": ""}
|
|
486
|
+
bound_issue_row(epic)
|
|
487
|
+
assert "state_reason" not in epic
|
|
488
|
+
|
|
489
|
+
reopened_epic = {"state": "open", "body": "x", "labels": [TRACKING_ISSUE_LABEL],
|
|
490
|
+
"state_reason": "reopened"}
|
|
491
|
+
bound_issue_row(reopened_epic)
|
|
492
|
+
assert reopened_epic["state_reason"] == "reopened"
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
def test_a_reopened_issue_is_still_not_landed_after_the_http_wire(
|
|
496
|
+
tmp_path: Path, valid_config_path: Path
|
|
497
|
+
) -> None:
|
|
498
|
+
"""#3384 end to end over the REAL wire: serve `/board` from a seeded DB,
|
|
499
|
+
reduce the response exactly as `coord drive-queue tick` does, and assert
|
|
500
|
+
the reopened issue's stale `merged` record still does NOT read as landed
|
|
501
|
+
— while the control issue (merged, never closed, the quadraui case) still
|
|
502
|
+
does. This is the assertion the byte cut could break."""
|
|
503
|
+
from coord.drive_queue import build_board_view, entry_key
|
|
504
|
+
|
|
505
|
+
db = tmp_path / "reopened.db"
|
|
506
|
+
conn = _ensure_schema_db(db)
|
|
507
|
+
_seed_reopened_and_control(conn)
|
|
508
|
+
conn.close()
|
|
509
|
+
|
|
510
|
+
board = _board_over_http(db, valid_config_path)
|
|
511
|
+
view = build_board_view(board)
|
|
512
|
+
|
|
513
|
+
reopened = view.facts(entry_key("api", 3380))
|
|
514
|
+
assert reopened.merged is True # the stale record is still on the board
|
|
515
|
+
assert reopened.reopened is True # ...and the witness survived the wire
|
|
516
|
+
assert reopened.landed is False # ...so the entry is NOT waved through
|
|
517
|
+
|
|
518
|
+
control = view.facts(entry_key("api", 3381))
|
|
519
|
+
assert control.merged is True
|
|
520
|
+
assert control.reopened is False
|
|
521
|
+
assert control.landed is True
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
def test_the_wire_and_the_daemon_host_local_path_agree_on_reopened(
|
|
525
|
+
tmp_path: Path, valid_config_path: Path, coord_db
|
|
526
|
+
) -> None:
|
|
527
|
+
"""One question, one answer (#2085): `reopened` is asked on two surfaces
|
|
528
|
+
— the HTTP `/board` wire (thin clients) and the daemon host's own local
|
|
529
|
+
SELECTs, which never run through `coord.board_wire` at all. Dropping the
|
|
530
|
+
empty default on only one of them would put the two surfaces on different
|
|
531
|
+
answers for the same DB. Assert all three reductions agree, row for row.
|
|
532
|
+
"""
|
|
533
|
+
from coord.commands.drive_queue import _local_issue_rows as tick_rows
|
|
534
|
+
from coord.drive_queue import build_board_view, entry_key
|
|
535
|
+
from coord.drive_state import _local_issue_rows as drive_rows
|
|
536
|
+
|
|
537
|
+
db = tmp_path / "reopened.db"
|
|
538
|
+
conn = _ensure_schema_db(db)
|
|
539
|
+
_seed_reopened_and_control(conn)
|
|
540
|
+
conn.close()
|
|
541
|
+
|
|
542
|
+
# Same rows again, this time in the autouse `coord_db` the local paths read.
|
|
543
|
+
_seed_reopened_and_control(coord_db)
|
|
544
|
+
|
|
545
|
+
board = _board_over_http(db, valid_config_path)
|
|
546
|
+
assignments = board["assignments"]
|
|
547
|
+
views = {
|
|
548
|
+
"http": build_board_view(board),
|
|
549
|
+
"drive_state": build_board_view(
|
|
550
|
+
{"assignments": assignments, "issues": drive_rows()}
|
|
551
|
+
),
|
|
552
|
+
"tick": build_board_view(
|
|
553
|
+
{"assignments": assignments, "issues": tick_rows()}
|
|
554
|
+
),
|
|
555
|
+
}
|
|
556
|
+
for number, expected in ((3380, True), (3381, False)):
|
|
557
|
+
key = entry_key("api", number)
|
|
558
|
+
answers = {name: v.facts(key).reopened for name, v in views.items()}
|
|
559
|
+
assert set(answers.values()) == {expected}, (
|
|
560
|
+
f"api#{number}: the three surfaces disagree about `reopened` "
|
|
561
|
+
f"({answers}) — a split-brain, whichever one is right"
|
|
562
|
+
)
|
|
563
|
+
landed = {name: v.facts(key).landed for name, v in views.items()}
|
|
564
|
+
assert set(landed.values()) == {not expected}, (
|
|
565
|
+
f"api#{number}: the three surfaces disagree about `landed` ({landed})"
|
|
566
|
+
)
|
|
@@ -2465,7 +2465,10 @@ class TestUatStateAndReasonColumns:
|
|
|
2465
2465
|
# #3357 bumped this to (18, 96): `assignments.test_confirmation` —
|
|
2466
2466
|
# machine-readable provenance for a `test_state` write (confirmed by a real
|
|
2467
2467
|
# out-of-band re-run, or merely carried forward from the worker's claim).
|
|
2468
|
-
|
|
2468
|
+
# #3384 bumped this to (19, 97): `issues.state_reason` — GitHub's own witness
|
|
2469
|
+
# that an issue was explicitly reopened, distinguishing that from an issue
|
|
2470
|
+
# that merged without ever auto-closing.
|
|
2471
|
+
_PINNED_SCHEMA_VERSION_AND_MIGRATION_COUNT = (19, 97)
|
|
2469
2472
|
|
|
2470
2473
|
|
|
2471
2474
|
class TestMigrateAddColumnsVersionGuard:
|