code-coordinator 0.5.452__tar.gz → 0.5.454__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.452 → code_coordinator-0.5.454}/PKG-INFO +1 -1
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dao.py +96 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/fleet_board.py +24 -1
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/fleet_snapshot.py +31 -3
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/housekeeping.py +85 -7
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/serve_app.py +110 -19
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/sql.py +36 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/state.py +84 -10
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_board_read_path.py +77 -3
- code_coordinator-0.5.454/tests/test_housekeeping.py +259 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_sql_dialect.py +58 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_sqlite_connect_ratchet.py +36 -5
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_store_contract.py +15 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/.gitignore +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/CLAUDE.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/GOAL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/LICENSE +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/MANIFEST.in +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/README.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/__init__.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/agent.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/audit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/backup.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/block_log.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/board_service.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/brain.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/claim.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/cli.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/client.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/codegen.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/comments.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/config.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/db.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/deps.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/drive.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/events.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/filelock.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/freshness.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/gates.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/goal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/context.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/models.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/render.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/health/units.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/hooks.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/interactive.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/models.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/network.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/notify.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/openapi.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/parentage.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/plans.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/progress.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/release_window.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/reports.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/review.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/self_health.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/smoke.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/split_work.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/test_author.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/test_report.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/usage.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/install-agent.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/pyproject.toml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/setup.cfg +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/__init__.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/backends.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/conftest.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_client.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_config.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_db.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_events.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_init.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_models.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_network.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_review.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_session.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_split.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_state.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.452 → code_coordinator-0.5.454}/tests/write_parity.py +0 -0
|
@@ -657,6 +657,7 @@ tests/test_health_unit_drift.py
|
|
|
657
657
|
tests/test_health_unit_enablement.py
|
|
658
658
|
tests/test_health_wedged_drive_queue.py
|
|
659
659
|
tests/test_hooks.py
|
|
660
|
+
tests/test_housekeeping.py
|
|
660
661
|
tests/test_human_attended_437.py
|
|
661
662
|
tests/test_init.py
|
|
662
663
|
tests/test_install_agent_venv_2911.py
|
{code_coordinator-0.5.452 → code_coordinator-0.5.454}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -683,6 +683,7 @@
|
|
|
683
683
|
"tests/test_health_unit_enablement.py",
|
|
684
684
|
"tests/test_health_wedged_drive_queue.py",
|
|
685
685
|
"tests/test_hooks.py",
|
|
686
|
+
"tests/test_housekeeping.py",
|
|
686
687
|
"tests/test_human_attended_437.py",
|
|
687
688
|
"tests/test_init.py",
|
|
688
689
|
"tests/test_install_agent_venv_2911.py",
|
|
@@ -78,6 +78,7 @@ from __future__ import annotations
|
|
|
78
78
|
import json
|
|
79
79
|
import os
|
|
80
80
|
import sqlite3
|
|
81
|
+
import threading
|
|
81
82
|
import time
|
|
82
83
|
from contextlib import closing
|
|
83
84
|
from pathlib import Path
|
|
@@ -186,6 +187,9 @@ class CoordStore(Protocol):
|
|
|
186
187
|
def get_assignment(self, assignment_id: str) -> dict | None: ...
|
|
187
188
|
def get_issue(self, repo_name: str, number: int) -> dict | None: ...
|
|
188
189
|
|
|
190
|
+
# ── change detection (#3294) ────────────────────────────────────────────
|
|
191
|
+
def change_token(self) -> str: ...
|
|
192
|
+
|
|
189
193
|
|
|
190
194
|
def compute_board_keep_ids(
|
|
191
195
|
assignment_index: list[dict],
|
|
@@ -305,10 +309,28 @@ class SqliteStore:
|
|
|
305
309
|
pooling under real load) and never migrates the DB. ``board_projection``
|
|
306
310
|
opens a single connection so the whole payload is one consistent
|
|
307
311
|
snapshot.
|
|
312
|
+
|
|
313
|
+
``change_token()`` (#3294) is the one exception to "fresh connection per
|
|
314
|
+
call": ``PRAGMA data_version`` is relative to the connection that reads
|
|
315
|
+
it — a brand-new SQLite connection always reports the same baseline
|
|
316
|
+
value no matter how many *other* connections have committed writes
|
|
317
|
+
before it opened, and only starts advancing once IT has observed a
|
|
318
|
+
change. So the cheap "did anything write?" signal only works against a
|
|
319
|
+
connection this store keeps open across calls; see ``_change_conn``
|
|
320
|
+
below and ``change_token``'s docstring.
|
|
308
321
|
"""
|
|
309
322
|
|
|
310
323
|
def __init__(self, db_path: Path | str | None = None) -> None:
|
|
311
324
|
self._path = Path(db_path) if db_path is not None else DB_PATH
|
|
325
|
+
# #3294: lazily-opened, kept-open connection dedicated to
|
|
326
|
+
# `change_token()` — see the class docstring for why this one
|
|
327
|
+
# connection is the exception to "fresh connection per call".
|
|
328
|
+
# Guarded by `_change_lock` because it is shared between the event
|
|
329
|
+
# loop thread (the /board handler's initial freshness check) and a
|
|
330
|
+
# threadpool worker (the same handler's rebuild leader) — see
|
|
331
|
+
# coord.serve_app's board().
|
|
332
|
+
self._change_conn: Any = None
|
|
333
|
+
self._change_lock = threading.Lock()
|
|
312
334
|
|
|
313
335
|
# ── connection ────────────────────────────────────────────────────────────
|
|
314
336
|
def _connect(self) -> Any:
|
|
@@ -576,3 +598,77 @@ class SqliteStore:
|
|
|
576
598
|
# retention cap; `after_json` arrives decoded as a real list.
|
|
577
599
|
"drive_queue": self._table(conn, "drive_queue", order="position"),
|
|
578
600
|
}
|
|
601
|
+
|
|
602
|
+
# ── change detection (#3294) ────────────────────────────────────────────
|
|
603
|
+
def _open_change_conn(self) -> Any:
|
|
604
|
+
conn = sql.connect(
|
|
605
|
+
backend=sql.DIALECT_SQLITE,
|
|
606
|
+
sqlite_path=self._path,
|
|
607
|
+
read_only=True,
|
|
608
|
+
check_same_thread=False,
|
|
609
|
+
)
|
|
610
|
+
sql.apply_row_factory(conn)
|
|
611
|
+
sql.apply_connection_setup(conn, read_only=True)
|
|
612
|
+
return conn
|
|
613
|
+
|
|
614
|
+
def change_token(self) -> str:
|
|
615
|
+
"""A cheap, opaque "has anything been written since I last asked?" token.
|
|
616
|
+
|
|
617
|
+
Backs the ``/board`` read path's cache invalidation in
|
|
618
|
+
``coord.serve_app`` (the board() handler's cache block): a 1.5 s TTL
|
|
619
|
+
forced a full board rebuild on essentially every poll even when
|
|
620
|
+
nothing had changed, because pollers run at 5 s and always missed the
|
|
621
|
+
window. This token replaces "younger than N seconds" with "no write
|
|
622
|
+
since this build" as the PRIMARY trigger -- the TTL survives only as
|
|
623
|
+
a safety upper bound (see serve_app.py) in case this token's source
|
|
624
|
+
ever misses a write path.
|
|
625
|
+
|
|
626
|
+
SQLite: :func:`coord.sql.sqlite_data_version` (``PRAGMA
|
|
627
|
+
data_version``, spelled in the dialect seam rather than here --
|
|
628
|
+
``PRAGMA`` is SQLite-only statement text and ``coord/sql.py`` is the
|
|
629
|
+
one module allowed to name one, #2782/#1948), which changes whenever
|
|
630
|
+
ANY connection -- not just this process's own POSTs, but the
|
|
631
|
+
drive-queue timer and a concurrent ``coord notify`` writing locally
|
|
632
|
+
too -- commits to the database file. **Unlike every other read in
|
|
633
|
+
this class, this is NOT a fresh connection per call**: ``data_version``
|
|
634
|
+
is relative to the connection that reads it, and a brand-new
|
|
635
|
+
connection always reports the same baseline value regardless of how
|
|
636
|
+
many other connections committed before it opened -- it only starts
|
|
637
|
+
advancing once it has personally observed a change. So this method
|
|
638
|
+
reuses one connection (``_change_conn``, opened lazily, guarded by
|
|
639
|
+
``_change_lock`` since it's shared between the event loop thread and
|
|
640
|
+
a threadpool worker -- see ``coord.serve_app.board()``) across every
|
|
641
|
+
call for the life of this ``SqliteStore``. See
|
|
642
|
+
https://sqlite.org/pragma.html#pragma_data_version. A failure (e.g.
|
|
643
|
+
the connection went stale) reopens once and, failing that, propagates
|
|
644
|
+
-- callers must treat any exception here as "assume changed, rebuild"
|
|
645
|
+
rather than crash the read path over a cache optimization.
|
|
646
|
+
|
|
647
|
+
Postgres (#827's in-flight lane): TODO(#3294-pg) -- ``data_version``
|
|
648
|
+
has no Postgres equivalent. A ``board_revision`` sequence bumped at
|
|
649
|
+
each write choke point (the ``_*_local()`` family in
|
|
650
|
+
``coord/state.py``) or a ``LISTEN``/``NOTIFY`` channel are the two
|
|
651
|
+
candidates the issue names; until one lands, this returns a constant
|
|
652
|
+
so two calls always compare equal and the cache degrades to
|
|
653
|
+
"TTL-only" -- exactly today's (pre-#3294) behaviour -- rather than
|
|
654
|
+
silently caching forever or rebuilding on every request.
|
|
655
|
+
"""
|
|
656
|
+
target = db_mod._resolve_store_target()
|
|
657
|
+
if target.backend == sql.DIALECT_POSTGRES:
|
|
658
|
+
return "pg-change-token-unimplemented" # TODO(#3294-pg)
|
|
659
|
+
with self._change_lock:
|
|
660
|
+
if self._change_conn is None:
|
|
661
|
+
self._change_conn = self._open_change_conn()
|
|
662
|
+
try:
|
|
663
|
+
return sql.sqlite_data_version(self._change_conn)
|
|
664
|
+
except Exception: # noqa: BLE001 — reopen-once fallback, see below
|
|
665
|
+
# Stale/broken connection (e.g. the underlying file was
|
|
666
|
+
# replaced out from under us) — reopen once. A repeat
|
|
667
|
+
# failure propagates to the caller, which treats it as
|
|
668
|
+
# "assume changed" rather than serving a false cache hit.
|
|
669
|
+
try:
|
|
670
|
+
self._change_conn.close()
|
|
671
|
+
except Exception: # noqa: BLE001 — already broken, best effort
|
|
672
|
+
pass
|
|
673
|
+
self._change_conn = self._open_change_conn()
|
|
674
|
+
return sql.sqlite_data_version(self._change_conn)
|
|
@@ -7,6 +7,16 @@ Like the other fleet checks in this package, the daemon's ``/board`` handler
|
|
|
7
7
|
(``coord.serve_app``) is the thing that actually measures its own latency and
|
|
8
8
|
serialized body size on each rebuild; this probe only judges the numbers it's
|
|
9
9
|
handed.
|
|
10
|
+
|
|
11
|
+
#3294 added a third, advisory-only number: how many rebuilds actually
|
|
12
|
+
*published* in the last 60s (``board_builds_per_minute`` on ``daemon_host``,
|
|
13
|
+
tracked by ``FleetHealthRefresher.record_board_stats``). The ``/board`` cache
|
|
14
|
+
used to rebuild on a fixed 1.5s TTL regardless of whether anything had
|
|
15
|
+
written — pollers run at 5s, so that meant a rebuild on nearly every poll.
|
|
16
|
+
The cache's primary trigger is now "a write happened" (``dao.CoordStore.
|
|
17
|
+
change_token``); this field is what makes that claim measurable rather than
|
|
18
|
+
assumed. Never affects severity — a burst of real writes legitimately drives
|
|
19
|
+
it up.
|
|
10
20
|
"""
|
|
11
21
|
|
|
12
22
|
from __future__ import annotations
|
|
@@ -41,6 +51,13 @@ def probe_board_latency(ctx: HealthContext) -> CheckResult:
|
|
|
41
51
|
dh = ctx.fleet.daemon_host or {}
|
|
42
52
|
latency_ms = dh.get("board_latency_ms")
|
|
43
53
|
payload_bytes = dh.get("board_payload_bytes")
|
|
54
|
+
# #3294: how many /board REBUILDS (not requests) published in the last
|
|
55
|
+
# 60s — the direct measurement of whether the write-triggered cache
|
|
56
|
+
# (dao.CoordStore.change_token, replacing the old 1.5s TTL) is actually
|
|
57
|
+
# cutting rebuilds, rather than an assumption. Advisory only: absent on
|
|
58
|
+
# an older daemon that hasn't published a build yet, and never affects
|
|
59
|
+
# severity below — a burst of real writes legitimately drives this up.
|
|
60
|
+
builds_per_minute = dh.get("board_builds_per_minute")
|
|
44
61
|
|
|
45
62
|
if latency_ms is None and payload_bytes is None:
|
|
46
63
|
return CheckResult(
|
|
@@ -72,6 +89,8 @@ def probe_board_latency(ctx: HealthContext) -> CheckResult:
|
|
|
72
89
|
parts.append(f"{latency_ms:.0f}ms")
|
|
73
90
|
if payload_bytes is not None:
|
|
74
91
|
parts.append(human_bytes(payload_bytes))
|
|
92
|
+
if builds_per_minute is not None:
|
|
93
|
+
parts.append(f"{builds_per_minute} build/min")
|
|
75
94
|
headroom = " / ".join(parts) if parts else "no data"
|
|
76
95
|
if severity is not Severity.OK:
|
|
77
96
|
headroom += f" ({', '.join(reasons)})"
|
|
@@ -85,5 +104,9 @@ def probe_board_latency(ctx: HealthContext) -> CheckResult:
|
|
|
85
104
|
f"warn at {human_bytes(_PAYLOAD_WARN_BYTES)}/{_LATENCY_WARN_MS:.0f}ms, "
|
|
86
105
|
f"crit at {human_bytes(_PAYLOAD_CRIT_BYTES)}/{_LATENCY_CRIT_MS:.0f}ms"
|
|
87
106
|
),
|
|
88
|
-
values={
|
|
107
|
+
values={
|
|
108
|
+
"latency_ms": latency_ms,
|
|
109
|
+
"payload_bytes": payload_bytes,
|
|
110
|
+
"builds_per_minute": builds_per_minute,
|
|
111
|
+
},
|
|
89
112
|
)
|
|
@@ -39,6 +39,7 @@ import json
|
|
|
39
39
|
import logging
|
|
40
40
|
import os
|
|
41
41
|
import time
|
|
42
|
+
from collections import deque
|
|
42
43
|
from dataclasses import dataclass, field
|
|
43
44
|
from pathlib import Path
|
|
44
45
|
|
|
@@ -276,6 +277,13 @@ class FleetHealthRefresher:
|
|
|
276
277
|
# than fabricating a 0.
|
|
277
278
|
self._board_latency_ms: float | None = None
|
|
278
279
|
self._board_payload_bytes: int | None = None
|
|
280
|
+
# #3294: one timestamp per PUBLISHED /board build (never per request
|
|
281
|
+
# — a cache hit or a 304 doesn't rebuild, so it doesn't append here).
|
|
282
|
+
# This is the daemon-side, directly-measured answer to "did #3294's
|
|
283
|
+
# write-triggered cache actually cut rebuilds?", rather than an
|
|
284
|
+
# assumption — see `_builds_per_minute` and `probe_board_latency`
|
|
285
|
+
# (coord/health/checks/fleet_board.py).
|
|
286
|
+
self._board_build_timestamps: deque[float] = deque()
|
|
279
287
|
|
|
280
288
|
def snapshot(self) -> FleetHealthSnapshot:
|
|
281
289
|
return self._snapshot
|
|
@@ -284,12 +292,31 @@ class FleetHealthRefresher:
|
|
|
284
292
|
"""Called by the /board handler after each publish (#1630/#1597).
|
|
285
293
|
|
|
286
294
|
Deliberately NOT I/O and NOT gated on the tick cadence — recording a
|
|
287
|
-
float+int is free, and the alternative
|
|
288
|
-
independently from this refresher) would
|
|
289
|
-
second board just to measure it, defeating the
|
|
295
|
+
float+int (+ one timestamp, #3294) is free, and the alternative
|
|
296
|
+
(recomputing board latency independently from this refresher) would
|
|
297
|
+
mean building a whole second board just to measure it, defeating the
|
|
298
|
+
point of the check.
|
|
290
299
|
"""
|
|
291
300
|
self._board_latency_ms = latency_ms
|
|
292
301
|
self._board_payload_bytes = payload_bytes
|
|
302
|
+
self._board_build_timestamps.append(time.time())
|
|
303
|
+
self._prune_build_timestamps()
|
|
304
|
+
|
|
305
|
+
def _prune_build_timestamps(self, now: float | None = None) -> None:
|
|
306
|
+
"""Drop build timestamps older than 60s — #3294's rolling window."""
|
|
307
|
+
cutoff = (now if now is not None else time.time()) - 60.0
|
|
308
|
+
timestamps = self._board_build_timestamps
|
|
309
|
+
while timestamps and timestamps[0] < cutoff:
|
|
310
|
+
timestamps.popleft()
|
|
311
|
+
|
|
312
|
+
def _builds_per_minute(self, now: float) -> int:
|
|
313
|
+
"""#3294: how many /board REBUILDS (not requests) published in the
|
|
314
|
+
last 60s — the direct measurement backing the write-triggered
|
|
315
|
+
cache's whole premise ("rebuilds should track writes, not a 5s poll
|
|
316
|
+
clock"). Read by `refresh()` below into ``daemon_host`` for
|
|
317
|
+
``fleet_board_latency`` (coord/health/checks/fleet_board.py)."""
|
|
318
|
+
self._prune_build_timestamps(now)
|
|
319
|
+
return len(self._board_build_timestamps)
|
|
293
320
|
|
|
294
321
|
def refresh(self, config) -> FleetHealthSnapshot: # noqa: ANN001 — coord.config.Config
|
|
295
322
|
from coord import network, state # noqa: PLC0415
|
|
@@ -376,6 +403,7 @@ class FleetHealthRefresher:
|
|
|
376
403
|
daemon_host["phantom_running"] = self._phantom_running_rows(machines)
|
|
377
404
|
daemon_host["board_latency_ms"] = self._board_latency_ms
|
|
378
405
|
daemon_host["board_payload_bytes"] = self._board_payload_bytes
|
|
406
|
+
daemon_host["board_builds_per_minute"] = self._builds_per_minute(now)
|
|
379
407
|
# #2858: per-repo issues-sync staleness — a small local JSON read
|
|
380
408
|
# (coord.issues_sync_status), same "daemon-host-local fact" shape as
|
|
381
409
|
# the two lines above. `coord.health.checks.issues_sync_staleness`
|
|
@@ -41,6 +41,30 @@ is wired in too, reclaiming ``~/.coord/confirm-worktrees/`` entries that
|
|
|
41
41
|
outlived ``confirm_branch``'s own per-run cleanup. That is disk hygiene, not
|
|
42
42
|
DB archiving, but reusing this sweep's cadence beats inventing a second timer
|
|
43
43
|
for a second maintenance job.
|
|
44
|
+
|
|
45
|
+
#3296: the same sweep also archives two tables #1107/#762 never reached —
|
|
46
|
+
both ~800 KB of every ``/board`` poll with no retention policy at all, per a
|
|
47
|
+
live-fleet sample that found 1,114 ``drive_queue`` rows all ``state=done``
|
|
48
|
+
and 13 of 14 ``plans`` rows belonging to assignments no longer on the board:
|
|
49
|
+
|
|
50
|
+
* terminal ``drive_queue`` rows (:data:`coord.drive_queue.TERMINAL_QUEUE_STATES`
|
|
51
|
+
— the same "is this queue entry terminal" answer the tick processor itself
|
|
52
|
+
uses, not a second definition) older than the retention window ->
|
|
53
|
+
``drive_queue_archive``. Age is read off the row's own last-touched
|
|
54
|
+
timestamp (``reason_at`` if the row was ever updated post-launch, else
|
|
55
|
+
``launched_at``, else ``enqueued_at``) — the same fallback chain
|
|
56
|
+
``merge_queue``'s ``last_attempt or enqueued_at`` uses just below.
|
|
57
|
+
* ``plans`` rows whose ``assignment_id`` no longer appears in the live
|
|
58
|
+
``assignments`` table (i.e. that assignment has itself already been
|
|
59
|
+
archived — by this sweep or an earlier one) -> ``plans_archive``. A plan
|
|
60
|
+
can only orphan once its assignment ages out, which already implies it is
|
|
61
|
+
past the retention window, so no separate cutoff is needed for ``plans``.
|
|
62
|
+
|
|
63
|
+
Both move via the same ``_move_rows``/``_ensure_archive_mirror`` machinery
|
|
64
|
+
above — move-not-delete, dumb-mirror archive tables — so ``GET
|
|
65
|
+
/drive-queue?state=...`` can still retrieve archived history (see
|
|
66
|
+
``coord.serve_app``) and nothing is ever unreachable, only un-shipped by
|
|
67
|
+
default from the live table / board projection.
|
|
44
68
|
"""
|
|
45
69
|
|
|
46
70
|
from __future__ import annotations
|
|
@@ -71,6 +95,10 @@ _NOTIFICATIONS_ARCHIVE = "notifications_archive"
|
|
|
71
95
|
_MERGE_QUEUE = "merge_queue"
|
|
72
96
|
_MERGE_QUEUE_ARCHIVE = "merge_queue_archive"
|
|
73
97
|
_MERGE_QUEUE_MERGED_STATE = "merged"
|
|
98
|
+
_DRIVE_QUEUE = "drive_queue"
|
|
99
|
+
_DRIVE_QUEUE_ARCHIVE = "drive_queue_archive"
|
|
100
|
+
_PLANS = "plans"
|
|
101
|
+
_PLANS_ARCHIVE = "plans_archive"
|
|
74
102
|
_BATCH = 400 # keep IN(...) clauses well under SQLite's 999-variable limit
|
|
75
103
|
|
|
76
104
|
|
|
@@ -148,20 +176,27 @@ def _move_rows(
|
|
|
148
176
|
|
|
149
177
|
def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
|
|
150
178
|
"""Archive stale terminal assignments + their notifications + merged
|
|
151
|
-
merge_queue entries
|
|
179
|
+
merge_queue entries + terminal drive_queue rows + orphaned plans, and
|
|
180
|
+
reclaim leaked confirm-worktree directories.
|
|
152
181
|
|
|
153
182
|
Returns ``{"archived_assignments": N, "archived_notifications": M,
|
|
154
|
-
"archived_merge_queue": K, "
|
|
155
|
-
"retention_days": D}``.
|
|
156
|
-
the counts that were (or,
|
|
157
|
-
no-op returns zeros.
|
|
183
|
+
"archived_merge_queue": K, "archived_drive_queue": Q, "archived_plans": P,
|
|
184
|
+
"removed_confirm_worktrees": W, "dry_run": bool, "retention_days": D}``.
|
|
185
|
+
``archived_*``/``removed_confirm_worktrees`` are the counts that were (or,
|
|
186
|
+
for ``dry_run``, would be) moved/deleted. A no-op returns zeros.
|
|
158
187
|
|
|
159
188
|
Conservative by construction: nothing active, recent (within the archive
|
|
160
189
|
window), queued-for-merge, latest-of-an-open-issue, or review-linked to any
|
|
161
190
|
such row is ever moved. Merge queue entries are archived only once they
|
|
162
191
|
are in the terminal ``MERGED`` state (#1107 Part 3) — non-terminal /
|
|
163
192
|
conflicted entries are left for ``prune_stale_queue_entries`` or manual
|
|
164
|
-
``coord merge --drop``.
|
|
193
|
+
``coord merge --drop``. Drive-queue entries are archived only once they
|
|
194
|
+
are in a :data:`coord.drive_queue.TERMINAL_QUEUE_STATES` state AND older
|
|
195
|
+
than the retention window (#3296) — a fresh ``done``/``blocked``/
|
|
196
|
+
``failed`` row stays put until it ages out, same as everything else this
|
|
197
|
+
sweep touches. ``plans`` rows follow their assignment: once an
|
|
198
|
+
assignment_id no longer appears in the live ``assignments`` table, its
|
|
199
|
+
plan is orphaned and moves too.
|
|
165
200
|
|
|
166
201
|
#2974: ``removed_confirm_worktrees`` is independent of the DB-archiving
|
|
167
202
|
``cutoff``/``retention_days`` above (it has its own, much shorter,
|
|
@@ -179,6 +214,8 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
|
|
|
179
214
|
"archived_assignments": 0,
|
|
180
215
|
"archived_notifications": 0,
|
|
181
216
|
"archived_merge_queue": 0,
|
|
217
|
+
"archived_drive_queue": 0,
|
|
218
|
+
"archived_plans": 0,
|
|
182
219
|
"removed_confirm_worktrees": len(swept_worktrees["removed"]),
|
|
183
220
|
"dry_run": dry_run,
|
|
184
221
|
"retention_days": _archive_retention_days(),
|
|
@@ -240,10 +277,47 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
|
|
|
240
277
|
)
|
|
241
278
|
]
|
|
242
279
|
|
|
280
|
+
# #3296: terminal drive_queue rows past the retention window. Reuses
|
|
281
|
+
# `coord.drive_queue.TERMINAL_QUEUE_STATES` — the same "is this queue
|
|
282
|
+
# entry terminal" the tick processor itself answers — rather than a
|
|
283
|
+
# second, driftable definition here.
|
|
284
|
+
from coord.drive_queue import TERMINAL_QUEUE_STATES # noqa: PLC0415
|
|
285
|
+
|
|
286
|
+
dq_rows = sql.execute(
|
|
287
|
+
conn,
|
|
288
|
+
"SELECT id, state, reason_at, launched_at, enqueued_at " # noqa: S608
|
|
289
|
+
f"FROM {_DRIVE_QUEUE}",
|
|
290
|
+
).fetchall()
|
|
291
|
+
dq_candidates = [
|
|
292
|
+
r["id"]
|
|
293
|
+
for r in dq_rows
|
|
294
|
+
if (r["state"] or "").lower() in TERMINAL_QUEUE_STATES
|
|
295
|
+
and (r["reason_at"] or r["launched_at"] or r["enqueued_at"] or 0) < cutoff
|
|
296
|
+
]
|
|
297
|
+
|
|
298
|
+
# #3296: `plans` rows whose assignment is no longer in the live
|
|
299
|
+
# `assignments` table — orphaned either by the archiving just computed
|
|
300
|
+
# above, or by an earlier sweep (run before this feature existed, hence
|
|
301
|
+
# the live fleet's 13-of-14-orphaned sample). No separate cutoff: a plan
|
|
302
|
+
# can only orphan once its assignment ages out, which already implies
|
|
303
|
+
# it's past the retention window.
|
|
304
|
+
live_assignment_ids = {r["assignment_id"] for r in index} - candidate_set
|
|
305
|
+
plan_candidates = [
|
|
306
|
+
r["assignment_id"]
|
|
307
|
+
for r in sql.execute(
|
|
308
|
+
conn, f"SELECT assignment_id FROM {_PLANS}" # noqa: S608
|
|
309
|
+
).fetchall()
|
|
310
|
+
if r["assignment_id"] and r["assignment_id"] not in live_assignment_ids
|
|
311
|
+
]
|
|
312
|
+
|
|
243
313
|
result["archived_assignments"] = len(candidates)
|
|
244
314
|
result["archived_notifications"] = len(notif_ids)
|
|
245
315
|
result["archived_merge_queue"] = len(mq_merged_ids)
|
|
246
|
-
|
|
316
|
+
result["archived_drive_queue"] = len(dq_candidates)
|
|
317
|
+
result["archived_plans"] = len(plan_candidates)
|
|
318
|
+
if dry_run or not (
|
|
319
|
+
candidates or notif_ids or mq_merged_ids or dq_candidates or plan_candidates
|
|
320
|
+
):
|
|
247
321
|
return result
|
|
248
322
|
|
|
249
323
|
with conn:
|
|
@@ -259,4 +333,8 @@ def sweep(*, dry_run: bool = False, now: float | None = None) -> dict:
|
|
|
259
333
|
_move_rows(
|
|
260
334
|
conn, _MERGE_QUEUE, _MERGE_QUEUE_ARCHIVE, "assignment_id", mq_merged_ids
|
|
261
335
|
)
|
|
336
|
+
if dq_candidates:
|
|
337
|
+
_move_rows(conn, _DRIVE_QUEUE, _DRIVE_QUEUE_ARCHIVE, "id", dq_candidates)
|
|
338
|
+
if plan_candidates:
|
|
339
|
+
_move_rows(conn, _PLANS, _PLANS_ARCHIVE, "assignment_id", plan_candidates)
|
|
262
340
|
return result
|
|
@@ -4800,7 +4800,11 @@ def openapi_spec() -> dict:
|
|
|
4800
4800
|
"summary": (
|
|
4801
4801
|
"#1753: read the operator-declared `coord drive` work "
|
|
4802
4802
|
"queue in run order. Filter by repo_name (+ optional "
|
|
4803
|
-
"issue_number); omit both to list the whole queue."
|
|
4803
|
+
"issue_number); omit both to list the whole queue. "
|
|
4804
|
+
"#3296: an explicit `state` also pulls in matching rows "
|
|
4805
|
+
"`coord.housekeeping.sweep()` has since archived, so "
|
|
4806
|
+
"terminal history stays reachable after it ages out of "
|
|
4807
|
+
"the live table."
|
|
4804
4808
|
),
|
|
4805
4809
|
"parameters": [
|
|
4806
4810
|
{
|
|
@@ -4811,6 +4815,16 @@ def openapi_spec() -> dict:
|
|
|
4811
4815
|
"name": "issue_number", "in": "query", "required": False,
|
|
4812
4816
|
"schema": {"type": "integer"},
|
|
4813
4817
|
},
|
|
4818
|
+
{
|
|
4819
|
+
"name": "state", "in": "query", "required": False,
|
|
4820
|
+
"schema": {"type": "string"},
|
|
4821
|
+
"description": (
|
|
4822
|
+
"#3296: filter by drive_queue.state (e.g. "
|
|
4823
|
+
"'done'/'blocked'/'failed'). When given, also "
|
|
4824
|
+
"reads drive_queue_archive so archived rows "
|
|
4825
|
+
"matching this state are still returned."
|
|
4826
|
+
),
|
|
4827
|
+
},
|
|
4814
4828
|
],
|
|
4815
4829
|
"responses": {
|
|
4816
4830
|
"200": {"description": "OK"},
|
|
@@ -5821,14 +5835,30 @@ def build_app(
|
|
|
5821
5835
|
|
|
5822
5836
|
_machine_metrics_sampler = machine_metrics_sampler or MachineMetricsSampler()
|
|
5823
5837
|
|
|
5824
|
-
#
|
|
5825
|
-
#
|
|
5838
|
+
# Cache for the computed /board projection so burst polls from the TUI
|
|
5839
|
+
# don't each pay the full board_projection + merge-plan + stage-projection
|
|
5826
5840
|
# recomputation (~465-issue load measured in the issue). Keyed to nothing
|
|
5827
|
-
# (one board per daemon instance).
|
|
5828
|
-
#
|
|
5829
|
-
#
|
|
5841
|
+
# (one board per daemon instance).
|
|
5842
|
+
#
|
|
5843
|
+
# #3294: the cache's PRIMARY invalidation trigger is "has anything
|
|
5844
|
+
# written since this build?" (``store.change_token()``, ``dao.CoordStore``
|
|
5845
|
+
# protocol — SQLite: ``PRAGMA data_version``), not a fixed clock. A 1.5 s
|
|
5846
|
+
# TTL forced a full rebuild on essentially every poll, because pollers
|
|
5847
|
+
# run at 5 s and always missed the window — and the rebuild (the
|
|
5848
|
+
# ``fleet_board_latency`` check's own 0.65-0.8 s measurement) is what
|
|
5849
|
+
# actually held the GIL, not the wire cost the ETag already covers.
|
|
5850
|
+
# ``COORD_BOARD_CACHE_TTL`` (default below) survives only as a SAFETY
|
|
5851
|
+
# UPPER BOUND — a rebuild is forced past that age regardless of the
|
|
5852
|
+
# change token, in case the token's source ever misses a write path —
|
|
5853
|
+
# not as the primary trigger. Busted immediately on board-mutating POSTs
|
|
5854
|
+
# (``_bust_board_cache``, unchanged by #3294) so a user action is visible
|
|
5855
|
+
# on the very next poll without waiting on either signal.
|
|
5830
5856
|
_board_cache: dict | None = None
|
|
5831
5857
|
_board_cache_at: float = 0.0
|
|
5858
|
+
# #3294: the ``store.change_token()`` value as of ``_board_cache``'s
|
|
5859
|
+
# build. A poll is served from cache only when the CURRENT token still
|
|
5860
|
+
# equals this one — i.e. nothing has written since.
|
|
5861
|
+
_board_cache_token: str | None = None
|
|
5832
5862
|
# #1597 Part 2: the fully-rendered JSON bytes for the currently-cached
|
|
5833
5863
|
# build, shared verbatim by every response that serves ``_board_cache``
|
|
5834
5864
|
# (a fresh build's own responses, every single-flight follower, and
|
|
@@ -6040,18 +6070,35 @@ def build_app(
|
|
|
6040
6070
|
# config reloads prompt.
|
|
6041
6071
|
_refresh_config()
|
|
6042
6072
|
|
|
6043
|
-
# Part 2 (cache): serve
|
|
6044
|
-
#
|
|
6045
|
-
#
|
|
6046
|
-
#
|
|
6047
|
-
#
|
|
6073
|
+
# Part 2 (cache): serve the cached projection when nothing has
|
|
6074
|
+
# written since it was built (#3294). Burst polls (TUI polls every
|
|
6075
|
+
# ~2 s) hit the cache; the real computation only runs when a write
|
|
6076
|
+
# actually happened. Cache is also busted immediately by the
|
|
6077
|
+
# board-mutating POST handlers below so user actions are visible on
|
|
6078
|
+
# the very next poll without waiting on either signal.
|
|
6048
6079
|
import time as _time # noqa: PLC0415
|
|
6049
|
-
|
|
6080
|
+
# Safety upper bound only (#3294) — see the comment on
|
|
6081
|
+
# `_board_cache_token` above. Raised from the pre-#3294 1.5 s default
|
|
6082
|
+
# now that the change-token check is the primary trigger.
|
|
6083
|
+
_safety_ttl = float(os.getenv("COORD_BOARD_CACHE_TTL", "30"))
|
|
6050
6084
|
_now = _time.monotonic()
|
|
6051
6085
|
nonlocal _board_cache, _board_cache_at, _board_cache_built_at, _board_body
|
|
6052
|
-
nonlocal _board_inflight
|
|
6086
|
+
nonlocal _board_cache_token, _board_inflight
|
|
6053
6087
|
_client_etag = request.headers.get("if-none-match")
|
|
6054
6088
|
|
|
6089
|
+
# #3294: cheap "did anything write?" probe — see
|
|
6090
|
+
# `dao.CoordStore.change_token`'s docstring. Run inline (not
|
|
6091
|
+
# threadpooled) like `_refresh_config()`'s stat() just above: a
|
|
6092
|
+
# single PRAGMA on an already-open connection, not I/O of the shape
|
|
6093
|
+
# #1336 invariant 1 guards against. A failure here must never crash
|
|
6094
|
+
# the read path over a cache optimization — treat it as "assume
|
|
6095
|
+
# changed" (a sentinel that can never equal a real cached token) so
|
|
6096
|
+
# the worst case is an extra rebuild, never a wedged/stale cache.
|
|
6097
|
+
try:
|
|
6098
|
+
_current_token: str | None = store.change_token()
|
|
6099
|
+
except Exception: # noqa: BLE001 — fail toward rebuilding, not crashing
|
|
6100
|
+
_current_token = None
|
|
6101
|
+
|
|
6055
6102
|
def _respond(result: dict, etag: str | None, body: bytes | None) -> Response:
|
|
6056
6103
|
if _client_etag and etag and _client_etag == etag:
|
|
6057
6104
|
# STILL identical to what the client holds — spare the wire
|
|
@@ -6076,7 +6123,18 @@ def build_app(
|
|
|
6076
6123
|
_cached_etag = _board_etag
|
|
6077
6124
|
_cached_at = _board_cache_at
|
|
6078
6125
|
_cached_body = _board_body
|
|
6079
|
-
|
|
6126
|
+
_cached_token = _board_cache_token
|
|
6127
|
+
# #3294: fresh iff nothing wrote since this build (token still
|
|
6128
|
+
# matches) AND we're inside the safety-TTL ceiling. `_cached_token
|
|
6129
|
+
# is not None` rules out a `None == None` false match when either
|
|
6130
|
+
# side came from a failed change_token() read (see above).
|
|
6131
|
+
_fresh = (
|
|
6132
|
+
_cached is not None
|
|
6133
|
+
and _cached_token is not None
|
|
6134
|
+
and _cached_token == _current_token
|
|
6135
|
+
and (_now - _cached_at) < _safety_ttl
|
|
6136
|
+
)
|
|
6137
|
+
if _fresh:
|
|
6080
6138
|
return _respond(_cached, _cached_etag, _cached_body)
|
|
6081
6139
|
|
|
6082
6140
|
# #1597 Part 1: single-flight the rebuild. On a cache miss, at most
|
|
@@ -6122,12 +6180,24 @@ def build_app(
|
|
|
6122
6180
|
# concurrent request calls _refresh_config() while _build() is running.
|
|
6123
6181
|
_cfg = config
|
|
6124
6182
|
|
|
6125
|
-
def _build() -> tuple[float, dict]:
|
|
6183
|
+
def _build() -> tuple[float, str | None, dict]:
|
|
6126
6184
|
# Snapshot-order stamp: captured immediately before the DB read so
|
|
6127
6185
|
# the publish step below can reject a build whose snapshot is
|
|
6128
6186
|
# older than the one already cached (concurrent rebuilds can
|
|
6129
6187
|
# finish out of order).
|
|
6130
6188
|
_built_at = _time.monotonic()
|
|
6189
|
+
# #3294: the change token AS OF this build's snapshot moment —
|
|
6190
|
+
# published alongside the cache below so the *next* request's
|
|
6191
|
+
# freshness check compares against "what had (or hadn't) written
|
|
6192
|
+
# by the time THIS build started", not some later moment.
|
|
6193
|
+
# `None` (never a real token — see `_current_token` above) if the
|
|
6194
|
+
# read itself fails; that means the published cache below can
|
|
6195
|
+
# never look "fresh" to a later poll, which is the safe direction
|
|
6196
|
+
# to fail in.
|
|
6197
|
+
try:
|
|
6198
|
+
_built_token = store.change_token()
|
|
6199
|
+
except Exception: # noqa: BLE001 — see `_current_token` above
|
|
6200
|
+
_built_token = None
|
|
6131
6201
|
# ── board projection ──────────────────────────────────────────────
|
|
6132
6202
|
try:
|
|
6133
6203
|
projection = store.board_projection()
|
|
@@ -6593,7 +6663,7 @@ def build_app(
|
|
|
6593
6663
|
from coord.board_wire import bound_board_payload as _bound # noqa: PLC0415
|
|
6594
6664
|
|
|
6595
6665
|
_bound(projection)
|
|
6596
|
-
return _built_at, projection
|
|
6666
|
+
return _built_at, _built_token, projection
|
|
6597
6667
|
|
|
6598
6668
|
# This coroutine is the single-flight leader: it alone runs _build(),
|
|
6599
6669
|
# then fans its outcome out to every waiter (itself plus every
|
|
@@ -6601,7 +6671,7 @@ def build_app(
|
|
|
6601
6671
|
# of the acceptance test, and why a failed build must reach every
|
|
6602
6672
|
# waiter rather than wedging the followers.
|
|
6603
6673
|
try:
|
|
6604
|
-
built_at, result = await run_in_threadpool(_build)
|
|
6674
|
+
built_at, built_token, result = await run_in_threadpool(_build)
|
|
6605
6675
|
except _BoardReadError as e:
|
|
6606
6676
|
_board_inflight = None # clear FIRST: a retry must build fresh,
|
|
6607
6677
|
# never see a "done" future and think it must wait on this one.
|
|
@@ -6650,7 +6720,9 @@ def build_app(
|
|
|
6650
6720
|
_board_body = body
|
|
6651
6721
|
_board_cache_at = _time.monotonic()
|
|
6652
6722
|
_board_cache_built_at = built_at
|
|
6653
|
-
# #
|
|
6723
|
+
_board_cache_token = built_token # #3294
|
|
6724
|
+
# #1630/#3294: feed this build's own latency + wire size
|
|
6725
|
+
# (+ the fact that a build happened at all) to the
|
|
6654
6726
|
# fleet-health snapshot's board-latency check — read back
|
|
6655
6727
|
# on the health-poll tick's own cadence, never recomputed
|
|
6656
6728
|
# inline (see FleetHealthRefresher.record_board_stats).
|
|
@@ -8687,9 +8759,16 @@ def build_app(
|
|
|
8687
8759
|
# filters to that repo; `repo_name` + `issue_number` narrows to the (at
|
|
8688
8760
|
# most one) entry for that issue; neither given lists the whole queue
|
|
8689
8761
|
# (hand-sized by definition — one row per issue an operator queued).
|
|
8762
|
+
#
|
|
8763
|
+
# #3296: `?state=` additionally reads `drive_queue_archive` — the
|
|
8764
|
+
# live table alone would silently lose a terminal entry the moment
|
|
8765
|
+
# `coord.housekeeping.sweep()` ages it out, making archived history
|
|
8766
|
+
# unreachable rather than merely un-shipped-by-default from the
|
|
8767
|
+
# unfiltered list.
|
|
8690
8768
|
from coord import state # noqa: PLC0415
|
|
8691
8769
|
|
|
8692
8770
|
repo_name = request.query_params.get("repo_name")
|
|
8771
|
+
state_filter = request.query_params.get("state")
|
|
8693
8772
|
raw_issue = request.query_params.get("issue_number")
|
|
8694
8773
|
issue_number = None
|
|
8695
8774
|
if raw_issue is not None:
|
|
@@ -8702,9 +8781,21 @@ def build_app(
|
|
|
8702
8781
|
try:
|
|
8703
8782
|
if repo_name and issue_number is not None:
|
|
8704
8783
|
entry = state._get_drive_queue_entry_local(repo_name, issue_number)
|
|
8784
|
+
if entry is None and state_filter:
|
|
8785
|
+
entry = state._get_drive_queue_archive_entry_local(
|
|
8786
|
+
repo_name, issue_number
|
|
8787
|
+
)
|
|
8788
|
+
if (
|
|
8789
|
+
entry is not None
|
|
8790
|
+
and state_filter
|
|
8791
|
+
and entry.get("state") != state_filter
|
|
8792
|
+
):
|
|
8793
|
+
entry = None
|
|
8705
8794
|
entries = [entry] if entry else []
|
|
8706
8795
|
else:
|
|
8707
|
-
entries = state._list_drive_queue_local(
|
|
8796
|
+
entries = state._list_drive_queue_local(
|
|
8797
|
+
repo_name, state=state_filter
|
|
8798
|
+
)
|
|
8708
8799
|
except Exception as e: # noqa: BLE001
|
|
8709
8800
|
return JSONResponse(
|
|
8710
8801
|
{"error": "drive-queue read failed", "detail": str(e)},
|