code-coordinator 0.5.582__tar.gz → 0.5.584__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.582 → code_coordinator-0.5.584}/PKG-INFO +1 -1
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/audit.py +16 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/_common.py +38 -18
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/drive.py +174 -20
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/reports.py +116 -13
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive.py +108 -2
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reports.py +161 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/.gitignore +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/CLAUDE.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/GOAL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/LICENSE +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/MANIFEST.in +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/README.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/__init__.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/agent.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/backup.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/block_log.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/board_service.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/brain.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/claim.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/cli.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/client.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/codegen.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/comments.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/config.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dao.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/db.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/deps.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/events.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/filelock.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/freshness.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/gates.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/goal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/context.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/models.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/render.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/health/units.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/hooks.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/interactive.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/models.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/network.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/notify.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/openapi.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/parentage.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/plans.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/progress.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/release_window.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/review.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/self_health.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/smoke.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/split_work.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/sql.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/state.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/test_author.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/test_report.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/usage.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/install-agent.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/pyproject.toml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/setup.cfg +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/__init__.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/backends.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/conftest.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_client.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_config.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_db.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_events.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_init.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_merge_verification.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_models.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_network.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_review.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_session.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_split.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_state.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.582 → code_coordinator-0.5.584}/tests/write_parity.py +0 -0
|
@@ -41,6 +41,7 @@ __all__ = [
|
|
|
41
41
|
"audit_lock_contention_losses",
|
|
42
42
|
"flush_lock_contention_summary",
|
|
43
43
|
"sweep_operational_retention",
|
|
44
|
+
"resolve_operational_retention_days",
|
|
44
45
|
]
|
|
45
46
|
|
|
46
47
|
# Valid values are documented in the issue but not enforced here — callers
|
|
@@ -325,6 +326,21 @@ def _resolve_operational_retention_days() -> float:
|
|
|
325
326
|
return 0.0
|
|
326
327
|
|
|
327
328
|
|
|
329
|
+
def resolve_operational_retention_days() -> float:
|
|
330
|
+
"""Public wrapper around :func:`_resolve_operational_retention_days`.
|
|
331
|
+
|
|
332
|
+
``coord.reports``' ``deprecated-routes`` report (#1947) needs the exact
|
|
333
|
+
same number this module's own sweep caps itself to: a ``zero_calls``
|
|
334
|
+
route cannot be trusted for longer than data has actually been kept
|
|
335
|
+
around, so the gate's "observed window" must be capped at this value,
|
|
336
|
+
not re-derived from ``coordinator.yml`` a second way. One source of
|
|
337
|
+
truth for "how far back is audit data trustworthy" — see #2085 (one
|
|
338
|
+
question, one answer) for why a second config read here would be a bug
|
|
339
|
+
waiting to happen rather than a convenience.
|
|
340
|
+
"""
|
|
341
|
+
return _resolve_operational_retention_days()
|
|
342
|
+
|
|
343
|
+
|
|
328
344
|
def sweep_operational_retention(*, now: float | None = None, dry_run: bool = False) -> int:
|
|
329
345
|
"""Delete ``tier='operational'`` ``audit_log`` rows older than
|
|
330
346
|
``audit.operational_retention_days`` (#3469). Returns the number of
|
|
@@ -330,7 +330,23 @@ def _save_config_snapshot(
|
|
|
330
330
|
pass
|
|
331
331
|
|
|
332
332
|
|
|
333
|
-
def
|
|
333
|
+
def resolve_and_load_config(path: Path | None, *, allow_thin_client: bool = True) -> Config:
|
|
334
|
+
"""Resolve *path* (thin-client aware) and parse it — the one place this
|
|
335
|
+
question is asked, so every caller that needs a *freshly loaded* config
|
|
336
|
+
(not just the one-time CLI boot in :func:`_load_config`, which also
|
|
337
|
+
writes the DB snapshot and exits the process on a parse failure) gets
|
|
338
|
+
the SAME resolution rule rather than a second, drifting copy (#2096,
|
|
339
|
+
"one question, one answer"). :func:`coord.drive.Driver`'s per-poll
|
|
340
|
+
config reload (#1654) is the other caller: unlike `_load_config`, it
|
|
341
|
+
must never call ``sys.exit`` (a bad mid-run edit must warn, not kill the
|
|
342
|
+
drive) and must never re-run ``_save_config_snapshot`` every poll (a
|
|
343
|
+
DELETE+INSERT into the shared ``machines`` table, meant for "this
|
|
344
|
+
process just booted", not "it's still running 50 polls later").
|
|
345
|
+
|
|
346
|
+
Raises :class:`ConfigError` on any resolution/parse failure — never
|
|
347
|
+
exits, never echoes. Callers that want the CLI's print-and-exit-2
|
|
348
|
+
behavior still go through :func:`_load_config`.
|
|
349
|
+
"""
|
|
334
350
|
# Resolve the default location ($COORD_CONFIG → ~/.coord/coordinator.yml →
|
|
335
351
|
# ./coordinator.yml) when no explicit --config was given, so `coord` works on
|
|
336
352
|
# a machine without a repo checkout and isn't sensitive to the CWD.
|
|
@@ -366,24 +382,28 @@ def _load_config(path: Path | None, *, allow_thin_client: bool = True) -> Config
|
|
|
366
382
|
# caller of ``_load_config`` legitimately wants thin-client resolution
|
|
367
383
|
# (they ARE clients of the daemon's board) — this flag exists so ONLY
|
|
368
384
|
# `coord serve`'s own bootstrap can opt out.
|
|
385
|
+
if allow_thin_client:
|
|
386
|
+
from coord.client import resolve_board_service # noqa: PLC0415
|
|
387
|
+
|
|
388
|
+
svc = resolve_board_service()
|
|
389
|
+
if svc is not None:
|
|
390
|
+
from coord.client import fetch_remote_config # noqa: PLC0415
|
|
391
|
+
|
|
392
|
+
try:
|
|
393
|
+
path = fetch_remote_config(svc)
|
|
394
|
+
except Exception as exc: # noqa: BLE001 — do NOT fall through to
|
|
395
|
+
# load(path): path may point at a local file that happens to
|
|
396
|
+
# exist (the exact bypass this issue closes). Fail loudly
|
|
397
|
+
# instead of silently trusting whatever is on disk.
|
|
398
|
+
raise ConfigError(
|
|
399
|
+
f"could not fetch config from {svc.url}: {exc}"
|
|
400
|
+
) from exc
|
|
401
|
+
return load(path)
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
def _load_config(path: Path | None, *, allow_thin_client: bool = True) -> Config:
|
|
369
405
|
try:
|
|
370
|
-
|
|
371
|
-
from coord.client import resolve_board_service # noqa: PLC0415
|
|
372
|
-
|
|
373
|
-
svc = resolve_board_service()
|
|
374
|
-
if svc is not None:
|
|
375
|
-
from coord.client import fetch_remote_config # noqa: PLC0415
|
|
376
|
-
|
|
377
|
-
try:
|
|
378
|
-
path = fetch_remote_config(svc)
|
|
379
|
-
except Exception as exc: # noqa: BLE001 — do NOT fall through to
|
|
380
|
-
# load(path): path may point at a local file that happens to
|
|
381
|
-
# exist (the exact bypass this issue closes). Fail loudly
|
|
382
|
-
# instead of silently trusting whatever is on disk.
|
|
383
|
-
raise ConfigError(
|
|
384
|
-
f"could not fetch config from {svc.url}: {exc}"
|
|
385
|
-
) from exc
|
|
386
|
-
cfg = load(path)
|
|
406
|
+
cfg = resolve_and_load_config(path, allow_thin_client=allow_thin_client)
|
|
387
407
|
except ConfigError as e:
|
|
388
408
|
click.echo(f"error: {e}", err=True)
|
|
389
409
|
sys.exit(2)
|
|
@@ -384,6 +384,33 @@ def _current_self_head() -> str | None:
|
|
|
384
384
|
return self_freshness(fetch=False).head_sha
|
|
385
385
|
|
|
386
386
|
|
|
387
|
+
def _load_config_for_drive(config_path: str) -> Any:
|
|
388
|
+
"""Real default for `Driver.config_loader` (#1654): re-read
|
|
389
|
+
coordinator.yml fresh — ``config_path`` empty resolves the usual
|
|
390
|
+
``$COORD_CONFIG`` → ``~/.coord/coordinator.yml`` → ``./coordinator.yml``
|
|
391
|
+
chain, AND the thin-client (board_service) redirect, exactly like the
|
|
392
|
+
construction-time load in ``coord.commands._common._load_config`` —
|
|
393
|
+
calls the SAME ``resolve_and_load_config`` helper that function now
|
|
394
|
+
wraps, so a mid-run reload can never resolve a *different* file (or
|
|
395
|
+
skip the thin-client branch an ordinary client is expected to take)
|
|
396
|
+
than the one this drive started with (#2096, "one question, one
|
|
397
|
+
answer"). Deliberately NOT ``_load_config`` itself: that one also
|
|
398
|
+
``sys.exit``s on a parse failure (a bad mid-run edit must warn, never
|
|
399
|
+
kill the drive — see ``Driver._reload_config``) and re-writes the
|
|
400
|
+
shared ``machines`` DB snapshot (meant for a one-time boot, not every
|
|
401
|
+
poll).
|
|
402
|
+
|
|
403
|
+
Imported lazily: ``coord.commands._common`` pulls in ``click``/
|
|
404
|
+
``httpx``, and every pure decision function in this module already
|
|
405
|
+
takes an already-loaded config rather than touching disk itself — this
|
|
406
|
+
keeps that true for every caller except the one that's explicitly an
|
|
407
|
+
I/O shell.
|
|
408
|
+
"""
|
|
409
|
+
from coord.commands._common import resolve_and_load_config # noqa: PLC0415
|
|
410
|
+
|
|
411
|
+
return resolve_and_load_config(Path(config_path) if config_path else None)
|
|
412
|
+
|
|
413
|
+
|
|
387
414
|
def _bounded_tail(text: str, limit: int = _CAPTURED_OUTPUT_LIMIT) -> str:
|
|
388
415
|
"""*text*, or its last *limit* characters if longer — the tail, because
|
|
389
416
|
the actionable line (a traceback's final "raise ...", a guard's remedy)
|
|
@@ -2111,6 +2138,39 @@ class Preflight:
|
|
|
2111
2138
|
warnings: tuple[str, ...] = ()
|
|
2112
2139
|
|
|
2113
2140
|
|
|
2141
|
+
def check_usage_gate(
|
|
2142
|
+
config: Any, usage_limits: PlanLimits | None,
|
|
2143
|
+
) -> str | None:
|
|
2144
|
+
"""Evaluate the usage gate — raise on ``block``, return a warn message
|
|
2145
|
+
on ``warn``, ``None`` otherwise.
|
|
2146
|
+
|
|
2147
|
+
#1654: the SOLE place this question is asked, so :func:`preflight`'s
|
|
2148
|
+
one-time call at the top of a run and :meth:`Driver._loop`'s per-poll
|
|
2149
|
+
re-check (added for #1654, since the gate's own ``mode``/thresholds can
|
|
2150
|
+
change mid-run) can never drift into two different answers for the
|
|
2151
|
+
same inputs (#2096, "one question, one answer").
|
|
2152
|
+
|
|
2153
|
+
*config* of ``None`` skips the gate entirely (no ``usage_gate`` section
|
|
2154
|
+
to consult) — mirrors every pre-#1466 caller.
|
|
2155
|
+
"""
|
|
2156
|
+
if config is None:
|
|
2157
|
+
return None
|
|
2158
|
+
gate_cfg = config.usage_gate
|
|
2159
|
+
limits = usage_limits if usage_limits is not None else PlanLimits(status="unknown")
|
|
2160
|
+
gate_result = evaluate_usage_gate(limits, gate_cfg)
|
|
2161
|
+
if gate_result.action == "block":
|
|
2162
|
+
raise DriveError(
|
|
2163
|
+
f"{gate_result.message} (usage_gate.mode: block) — refusing to "
|
|
2164
|
+
"dispatch. Wait for the window to reset, or lower urgency by "
|
|
2165
|
+
"raising the threshold / setting usage_gate.mode: warn in "
|
|
2166
|
+
"coordinator.yml.",
|
|
2167
|
+
EXIT_USAGE,
|
|
2168
|
+
)
|
|
2169
|
+
if gate_result.action == "warn":
|
|
2170
|
+
return f"{gate_result.message} (usage_gate.mode: warn — proceeding anyway)"
|
|
2171
|
+
return None
|
|
2172
|
+
|
|
2173
|
+
|
|
2114
2174
|
def preflight(
|
|
2115
2175
|
state: IssueState,
|
|
2116
2176
|
opts: DriveOptions,
|
|
@@ -2165,20 +2225,9 @@ def preflight(
|
|
|
2165
2225
|
|
|
2166
2226
|
warnings: list[str] = []
|
|
2167
2227
|
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
gate_result = evaluate_usage_gate(limits, gate_cfg)
|
|
2172
|
-
if gate_result.action == "block":
|
|
2173
|
-
raise DriveError(
|
|
2174
|
-
f"{gate_result.message} (usage_gate.mode: block) — refusing to "
|
|
2175
|
-
"dispatch. Wait for the window to reset, or lower urgency by "
|
|
2176
|
-
"raising the threshold / setting usage_gate.mode: warn in "
|
|
2177
|
-
"coordinator.yml.",
|
|
2178
|
-
EXIT_USAGE,
|
|
2179
|
-
)
|
|
2180
|
-
if gate_result.action == "warn":
|
|
2181
|
-
warnings.append(f"{gate_result.message} (usage_gate.mode: warn — proceeding anyway)")
|
|
2228
|
+
gate_warning = check_usage_gate(config, usage_limits)
|
|
2229
|
+
if gate_warning:
|
|
2230
|
+
warnings.append(gate_warning)
|
|
2182
2231
|
|
|
2183
2232
|
if not state.auto_loop:
|
|
2184
2233
|
warnings.append(
|
|
@@ -5399,6 +5448,13 @@ class Driver:
|
|
|
5399
5448
|
# without a real git checkout — same shape as *usage_prober* above.
|
|
5400
5449
|
# Defaults to the real, local-only (`fetch=False`) probe.
|
|
5401
5450
|
self_head_probe: Callable[[], str | None] = _current_self_head
|
|
5451
|
+
# #1654: injected so tests can script a fake coordinator.yml reload
|
|
5452
|
+
# sequence without real YAML I/O — same injection shape as
|
|
5453
|
+
# *usage_prober*/*self_head_probe* above. Defaults to the real loader,
|
|
5454
|
+
# re-reading ``self.opts.config_path`` (empty string resolves the usual
|
|
5455
|
+
# ``$COORD_CONFIG`` → ``~/.coord/coordinator.yml`` → ``./coordinator.yml``
|
|
5456
|
+
# chain) fresh every call — see ``_reload_config``.
|
|
5457
|
+
config_loader: Callable[[str], Any] = _load_config_for_drive
|
|
5402
5458
|
|
|
5403
5459
|
_run_log: Path | None = field(default=None, init=False, repr=False)
|
|
5404
5460
|
# #2443: this session's own on-disk `coord` HEAD, captured once by
|
|
@@ -5426,6 +5482,17 @@ class Driver:
|
|
|
5426
5482
|
# call, so it is only ever trustworthy read immediately after one, which
|
|
5427
5483
|
# is exactly how `_loop` uses it.
|
|
5428
5484
|
_last_run_output: str = field(default="", init=False, repr=False)
|
|
5485
|
+
# #1654: latches so a coordinator.yml that fails to parse mid-run (an
|
|
5486
|
+
# operator mid-edit, a truncated write) warns ONCE for the whole broken
|
|
5487
|
+
# window, not once per poll — `_reload_config` sets this on a failed
|
|
5488
|
+
# reload and clears it (with a short recovery log line) the first time a
|
|
5489
|
+
# reload succeeds again.
|
|
5490
|
+
_config_reload_broken: bool = field(default=False, init=False, repr=False)
|
|
5491
|
+
# #1654: the last usage-gate WARN message this run already printed, so a
|
|
5492
|
+
# `mode: warn` config that stays warn-worthy across many polls (the
|
|
5493
|
+
# common case — the usage window doesn't reset every poll) logs once per
|
|
5494
|
+
# DISTINCT message rather than spamming the identical line every tick.
|
|
5495
|
+
_last_usage_gate_warning: str | None = field(default=None, init=False, repr=False)
|
|
5429
5496
|
|
|
5430
5497
|
def __post_init__(self) -> None:
|
|
5431
5498
|
self.out = self.out or sys.stdout
|
|
@@ -5473,6 +5540,68 @@ class Driver:
|
|
|
5473
5540
|
except DriveStateError as exc:
|
|
5474
5541
|
raise DriveError(str(exc), EXIT_USAGE) from exc
|
|
5475
5542
|
|
|
5543
|
+
def _reload_config(self) -> None:
|
|
5544
|
+
"""Re-read coordinator.yml at the top of every poll (#1654).
|
|
5545
|
+
|
|
5546
|
+
`self.config` used to be a pure construction-time snapshot the poll
|
|
5547
|
+
loop never revisited — a ladder/usage-gate edit made while a drive
|
|
5548
|
+
was already running had no effect until the NEXT invocation, which
|
|
5549
|
+
is exactly backwards for a lever (#1649's reroute mode, a tightened
|
|
5550
|
+
threshold) most likely to be flipped reactively, mid-window, because
|
|
5551
|
+
a drive is already running and burning credits. Cheap: one YAML
|
|
5552
|
+
parse against a loop that already shells out to a `coord`
|
|
5553
|
+
subprocess (`run_coord`) every tick.
|
|
5554
|
+
|
|
5555
|
+
A config that fails to parse (an operator mid-edit, a truncated
|
|
5556
|
+
write) must never kill an otherwise-healthy run: this keeps the
|
|
5557
|
+
last-good `self.config` and only warns — exactly ONCE for the whole
|
|
5558
|
+
broken window (`_config_reload_broken` latches it), not once per
|
|
5559
|
+
poll. `self.opts` (this invocation's own identity — the CLI flags)
|
|
5560
|
+
is never touched here; only `self.config` is replaced.
|
|
5561
|
+
"""
|
|
5562
|
+
try:
|
|
5563
|
+
new_config = self.config_loader(self.opts.config_path)
|
|
5564
|
+
except Exception as exc: # noqa: BLE001 — a bad edit must never kill the drive
|
|
5565
|
+
if not self._config_reload_broken:
|
|
5566
|
+
self.warn(
|
|
5567
|
+
"coordinator.yml reload failed, keeping the last-known-"
|
|
5568
|
+
f"good config: {exc}"
|
|
5569
|
+
)
|
|
5570
|
+
self._config_reload_broken = True
|
|
5571
|
+
return
|
|
5572
|
+
if self._config_reload_broken:
|
|
5573
|
+
self.log(
|
|
5574
|
+
"coordinator.yml reload recovered — back to a fresh config"
|
|
5575
|
+
)
|
|
5576
|
+
self._config_reload_broken = False
|
|
5577
|
+
self._log_config_change(self.config, new_config)
|
|
5578
|
+
self.config = new_config
|
|
5579
|
+
|
|
5580
|
+
def _log_config_change(self, old: Any, new: Any) -> None:
|
|
5581
|
+
"""Narrate a reload that changes a decision this loop actually makes
|
|
5582
|
+
(#1654), so a mid-run behaviour change is explicable from this run's
|
|
5583
|
+
own log afterwards rather than looking like nondeterminism.
|
|
5584
|
+
|
|
5585
|
+
Deliberately narrow — only the usage gate, the one knob this loop
|
|
5586
|
+
re-consults every poll (see `check_usage_gate` below) — rather than
|
|
5587
|
+
a full recursive diff of the whole `Config` object, which would be
|
|
5588
|
+
noisy (most fields are per-repo/machine topology this driver never
|
|
5589
|
+
reads for THIS issue) and risks echoing a secret accidentally pasted
|
|
5590
|
+
into coordinator.yml into this run's log.
|
|
5591
|
+
"""
|
|
5592
|
+
old_gate, new_gate = old.usage_gate, new.usage_gate
|
|
5593
|
+
old_shape = (old_gate.mode, old_gate.session_threshold_pct, old_gate.week_threshold_pct)
|
|
5594
|
+
new_shape = (new_gate.mode, new_gate.session_threshold_pct, new_gate.week_threshold_pct)
|
|
5595
|
+
if old_shape != new_shape:
|
|
5596
|
+
self.log(
|
|
5597
|
+
"coordinator.yml reload: usage_gate changed "
|
|
5598
|
+
f"mode {old_gate.mode!r} -> {new_gate.mode!r}, "
|
|
5599
|
+
f"session_threshold_pct {old_gate.session_threshold_pct!r} -> "
|
|
5600
|
+
f"{new_gate.session_threshold_pct!r}, week_threshold_pct "
|
|
5601
|
+
f"{old_gate.week_threshold_pct!r} -> {new_gate.week_threshold_pct!r} "
|
|
5602
|
+
"— this run's next dispatch decision reflects the new config."
|
|
5603
|
+
)
|
|
5604
|
+
|
|
5476
5605
|
# ── execution ───────────────────────────────────────────────────────
|
|
5477
5606
|
def run_coord(self, args: tuple[str, ...], *, serialize_merge: bool = False) -> int:
|
|
5478
5607
|
"""Run a ``coord`` subcommand, echoing its output and appending to the log.
|
|
@@ -5751,12 +5880,15 @@ class Driver:
|
|
|
5751
5880
|
if state is None:
|
|
5752
5881
|
raise DriveError("could not read board state", EXIT_USAGE)
|
|
5753
5882
|
|
|
5754
|
-
# #1466:
|
|
5755
|
-
#
|
|
5756
|
-
#
|
|
5757
|
-
#
|
|
5758
|
-
#
|
|
5759
|
-
#
|
|
5883
|
+
# #1466: this is the ONE-TIME preflight check — raises/warns before
|
|
5884
|
+
# the loop below ever starts, using whatever config this run was
|
|
5885
|
+
# launched with. #1654 added a SECOND, per-poll re-check
|
|
5886
|
+
# (`check_usage_gate`, called again right before every RUN action
|
|
5887
|
+
# below) against `self.config` AS RELOADED THAT TICK, so a mid-run
|
|
5888
|
+
# `usage_gate.mode`/threshold edit reaches the very next dispatch —
|
|
5889
|
+
# this first call only ever decides whether the run gets to start at
|
|
5890
|
+
# all. Skipped entirely when the gate is off, so a `disabled`
|
|
5891
|
+
# config never pays the subprocess cost.
|
|
5760
5892
|
usage_limits = (
|
|
5761
5893
|
self.usage_prober() if self.config.usage_gate.mode != "disabled" else None
|
|
5762
5894
|
)
|
|
@@ -5876,6 +6008,12 @@ class Driver:
|
|
|
5876
6008
|
)
|
|
5877
6009
|
return EXIT_DEADLINE
|
|
5878
6010
|
|
|
6011
|
+
# #1654: re-read coordinator.yml before every decision this tick
|
|
6012
|
+
# makes — see `_reload_config`'s own docstring for why (a
|
|
6013
|
+
# construction-time snapshot made a mid-run ladder/usage-gate
|
|
6014
|
+
# edit invisible for the drive's entire remaining life).
|
|
6015
|
+
self._reload_config()
|
|
6016
|
+
|
|
5879
6017
|
state = self.read_state()
|
|
5880
6018
|
if state is None:
|
|
5881
6019
|
self.sleeper(self.opts.poll)
|
|
@@ -6076,6 +6214,22 @@ class Driver:
|
|
|
6076
6214
|
self.log(action.label)
|
|
6077
6215
|
|
|
6078
6216
|
if action.kind == RUN:
|
|
6217
|
+
# #1654: re-check the usage gate against THIS poll's
|
|
6218
|
+
# (possibly just-reloaded) config, not the snapshot
|
|
6219
|
+
# `preflight()` consulted once before the loop started —
|
|
6220
|
+
# `check_usage_gate` is the SAME question preflight asks, so
|
|
6221
|
+
# a mid-run `usage_gate.mode` edit (warn -> block, or a
|
|
6222
|
+
# tightened threshold) reaches the very next dispatch
|
|
6223
|
+
# instead of only the next `coord drive` invocation.
|
|
6224
|
+
usage_limits = (
|
|
6225
|
+
self.usage_prober()
|
|
6226
|
+
if self.config.usage_gate.mode != "disabled"
|
|
6227
|
+
else None
|
|
6228
|
+
)
|
|
6229
|
+
gate_warning = check_usage_gate(self.config, usage_limits)
|
|
6230
|
+
if gate_warning and gate_warning != self._last_usage_gate_warning:
|
|
6231
|
+
self.warn(gate_warning)
|
|
6232
|
+
self._last_usage_gate_warning = gate_warning
|
|
6079
6233
|
rc = self.run_coord(
|
|
6080
6234
|
action.command, serialize_merge=action.serialize_merge
|
|
6081
6235
|
)
|
|
@@ -4409,6 +4409,22 @@ def _validate_issue_cost_status(value: str) -> None:
|
|
|
4409
4409
|
# the corpus level: if literally zero deprecation-category rows exist
|
|
4410
4410
|
# anywhere (any route), collection cannot be confirmed live, so EVERY route
|
|
4411
4411
|
# reads `no_data` rather than the misleadingly reassuring `zero_calls`.
|
|
4412
|
+
#
|
|
4413
|
+
# #1947's gate needs one more number this report didn't used to carry: NOT
|
|
4414
|
+
# just "zero calls ever recorded" but "zero calls across a window of at
|
|
4415
|
+
# least 30 days" — a route deprecated yesterday with zero calls so far is
|
|
4416
|
+
# not evidence of anything yet. `observed_secs`/`eligible` below answer that
|
|
4417
|
+
# without a second config read or a second place to get it wrong (#2085):
|
|
4418
|
+
# `observed_secs` is seeded from the EARLIEST deprecation-category row across
|
|
4419
|
+
# the whole corpus (a lower bound on how long telemetry has been live — it
|
|
4420
|
+
# can only ever UNDERSTATE the true window, never overstate it, which is the
|
|
4421
|
+
# safe direction for a retirement gate) and then capped at
|
|
4422
|
+
# `audit.operational_retention_days` — resolved by `run_deprecated_routes`
|
|
4423
|
+
# through `coord.audit.resolve_operational_retention_days`, the same cap that
|
|
4424
|
+
# module's own sweep enforces, and passed DOWN into the pure fold rather than
|
|
4425
|
+
# read inside it — because a row older than retention could have been swept
|
|
4426
|
+
# without a trace, so claiming a window longer than retention allows would
|
|
4427
|
+
# be exactly the "belief" #1945/#1947 exist to rule out.
|
|
4412
4428
|
|
|
4413
4429
|
DEPRECATED_ROUTES_COLUMNS = [
|
|
4414
4430
|
"route",
|
|
@@ -4417,6 +4433,8 @@ DEPRECATED_ROUTES_COLUMNS = [
|
|
|
4417
4433
|
"last_call",
|
|
4418
4434
|
"call_count",
|
|
4419
4435
|
"clients",
|
|
4436
|
+
"observed_secs",
|
|
4437
|
+
"eligible",
|
|
4420
4438
|
]
|
|
4421
4439
|
|
|
4422
4440
|
# One entry per DEPRECATED_ROUTES_COLUMNS entry, same order (#1760).
|
|
@@ -4427,6 +4445,8 @@ DEPRECATED_ROUTES_COLUMN_META = [
|
|
|
4427
4445
|
ColumnMeta(id="last_call", label="Last Call", kind="timestamp"),
|
|
4428
4446
|
ColumnMeta(id="call_count", label="Calls", kind="int", align="right"),
|
|
4429
4447
|
ColumnMeta(id="clients", label="Clients", kind="list"),
|
|
4448
|
+
ColumnMeta(id="observed_secs", label="Observed For", kind="duration", align="right"),
|
|
4449
|
+
ColumnMeta(id="eligible", label="Retirement", kind="enum"),
|
|
4430
4450
|
]
|
|
4431
4451
|
|
|
4432
4452
|
# `status` values. `no_data` and `zero_calls` are BOTH "nothing seen for
|
|
@@ -4436,12 +4456,26 @@ DEPRECATED_ROUTE_NO_DATA = "no_data"
|
|
|
4436
4456
|
DEPRECATED_ROUTE_ZERO_CALLS = "zero_calls"
|
|
4437
4457
|
DEPRECATED_ROUTE_IN_USE = "in_use"
|
|
4438
4458
|
|
|
4459
|
+
# `eligible` values (#1947) — the gate's own verdict, never the belief of
|
|
4460
|
+
# whoever is reading the table. `not_yet` covers every disqualifying case
|
|
4461
|
+
# (in_use, no_data, or zero_calls but not observed long enough) on purpose:
|
|
4462
|
+
# a reader who only checks for the literal string `eligible` can never be
|
|
4463
|
+
# fooled by a value this report predates adding.
|
|
4464
|
+
DEPRECATED_ROUTE_ELIGIBLE = "eligible"
|
|
4465
|
+
DEPRECATED_ROUTE_NOT_ELIGIBLE = "not_yet"
|
|
4466
|
+
|
|
4467
|
+
# The gate's own number (issue #1947): "a window of at least 30 days".
|
|
4468
|
+
# Named so it cannot silently drift between the report and anything that
|
|
4469
|
+
# later re-checks its verdict.
|
|
4470
|
+
DEPRECATION_RETIREMENT_WINDOW_DAYS = 30.0
|
|
4471
|
+
|
|
4439
4472
|
|
|
4440
4473
|
def fold_deprecated_routes(
|
|
4441
4474
|
entries: Iterable[Mapping[str, Any]],
|
|
4442
4475
|
generated_at: float,
|
|
4443
4476
|
*,
|
|
4444
4477
|
routes: Mapping[str, str] | None = None,
|
|
4478
|
+
retention_days: float = 0.0,
|
|
4445
4479
|
) -> ReportResult:
|
|
4446
4480
|
"""Fold already-fetched deprecation-telemetry audit rows into a
|
|
4447
4481
|
per-route snapshot. **Pure** — no DB, no daemon, no clock.
|
|
@@ -4456,6 +4490,18 @@ def fold_deprecated_routes(
|
|
|
4456
4490
|
report reads it rather than redeclaring it (the ``routes=`` override
|
|
4457
4491
|
exists purely so this stays a pure function a test can call without
|
|
4458
4492
|
importing the daemon module).
|
|
4493
|
+
|
|
4494
|
+
``retention_days`` is a PLAIN NUMBER here, defaulting to ``0``
|
|
4495
|
+
(uncapped), and is deliberately NOT resolved from ``coordinator.yml`` by
|
|
4496
|
+
this function: reading the ambient config would make a function
|
|
4497
|
+
documented as pure answer differently on a machine that happens to have
|
|
4498
|
+
a ``coordinator.yml`` with a small ``audit.operational_retention_days``
|
|
4499
|
+
than on one that has none — the host-dependent-result class #2170 exists
|
|
4500
|
+
to keep out of this suite. :func:`run_deprecated_routes` (the impure
|
|
4501
|
+
runner, which already owns the clock and the DB walk) resolves it from
|
|
4502
|
+
:func:`coord.audit.resolve_operational_retention_days` and passes it
|
|
4503
|
+
down, exactly as ``run_drive_queue_status`` resolves ``queue_escalation``
|
|
4504
|
+
for ``fold_drive_queue_status``.
|
|
4459
4505
|
"""
|
|
4460
4506
|
if routes is None:
|
|
4461
4507
|
from coord.serve_app import RPC_SUPERSEDED_BY_RESOURCE # noqa: PLC0415
|
|
@@ -4464,6 +4510,14 @@ def fold_deprecated_routes(
|
|
|
4464
4510
|
|
|
4465
4511
|
entries = list(entries)
|
|
4466
4512
|
any_data = bool(entries)
|
|
4513
|
+
# `or generated_at` would be wrong here: a `ts` of exactly `0.0` (epoch,
|
|
4514
|
+
# or a deliberately-zeroed test fixture) is falsy and must still count
|
|
4515
|
+
# as a real, very-old timestamp — not get silently replaced by "now".
|
|
4516
|
+
earliest_ts = (
|
|
4517
|
+
min(e.get("ts") if e.get("ts") is not None else generated_at for e in entries)
|
|
4518
|
+
if entries
|
|
4519
|
+
else None
|
|
4520
|
+
)
|
|
4467
4521
|
|
|
4468
4522
|
by_route: dict[str, list[Mapping[str, Any]]] = {r: [] for r in routes}
|
|
4469
4523
|
for entry in entries:
|
|
@@ -4495,6 +4549,18 @@ def fold_deprecated_routes(
|
|
|
4495
4549
|
status = DEPRECATED_ROUTE_ZERO_CALLS
|
|
4496
4550
|
else:
|
|
4497
4551
|
status = DEPRECATED_ROUTE_NO_DATA
|
|
4552
|
+
|
|
4553
|
+
observed_secs: float | None = None
|
|
4554
|
+
eligible = DEPRECATED_ROUTE_NOT_ELIGIBLE
|
|
4555
|
+
if status == DEPRECATED_ROUTE_ZERO_CALLS and earliest_ts is not None:
|
|
4556
|
+
# `any_data` is True here, so `earliest_ts` is always set — the
|
|
4557
|
+
# `is not None` above is what lets a type checker see that too.
|
|
4558
|
+
observed_secs = max(0.0, generated_at - earliest_ts)
|
|
4559
|
+
if retention_days > 0:
|
|
4560
|
+
observed_secs = min(observed_secs, retention_days * 86400.0)
|
|
4561
|
+
if observed_secs >= DEPRECATION_RETIREMENT_WINDOW_DAYS * 86400.0:
|
|
4562
|
+
eligible = DEPRECATED_ROUTE_ELIGIBLE
|
|
4563
|
+
|
|
4498
4564
|
rows.append(
|
|
4499
4565
|
{
|
|
4500
4566
|
"route": route,
|
|
@@ -4503,6 +4569,8 @@ def fold_deprecated_routes(
|
|
|
4503
4569
|
"last_call": last_call,
|
|
4504
4570
|
"call_count": len(calls),
|
|
4505
4571
|
"clients": clients,
|
|
4572
|
+
"observed_secs": observed_secs,
|
|
4573
|
+
"eligible": eligible,
|
|
4506
4574
|
}
|
|
4507
4575
|
)
|
|
4508
4576
|
|
|
@@ -4517,6 +4585,14 @@ def fold_deprecated_routes(
|
|
|
4517
4585
|
"`no_data`, not `zero_calls` — treat it as UNKNOWN, never as "
|
|
4518
4586
|
"evidence it is safe to retire."
|
|
4519
4587
|
)
|
|
4588
|
+
if any_data and 0 < retention_days < DEPRECATION_RETIREMENT_WINDOW_DAYS:
|
|
4589
|
+
notes.append(
|
|
4590
|
+
f"audit.operational_retention_days is {retention_days:g}, below "
|
|
4591
|
+
f"the {DEPRECATION_RETIREMENT_WINDOW_DAYS:g}-day window #1947's "
|
|
4592
|
+
"retirement gate requires — a `zero_calls` route can never "
|
|
4593
|
+
"accumulate enough trustworthy observed time to read `eligible` "
|
|
4594
|
+
"until this is raised (or disabled with `0`)."
|
|
4595
|
+
)
|
|
4520
4596
|
|
|
4521
4597
|
return ReportResult(
|
|
4522
4598
|
report_id="deprecated-routes",
|
|
@@ -4540,29 +4616,49 @@ def run_deprecated_routes(
|
|
|
4540
4616
|
now: float | None = None,
|
|
4541
4617
|
fetch: Callable[[float], tuple[Sequence[Mapping[str, Any]], bool]] | None = None,
|
|
4542
4618
|
routes: Mapping[str, str] | None = None,
|
|
4619
|
+
retention_days: float | None = None,
|
|
4543
4620
|
) -> ReportResult:
|
|
4544
4621
|
"""Fetch every recorded deprecated-RPC-route call and fold it (#1945).
|
|
4545
4622
|
|
|
4546
|
-
``fetch``/``routes`` are test seams (mirrors every
|
|
4547
|
-
``fetch=`` seam). Production always walks the FULL
|
|
4548
|
-
(``since=0``), never a recent window — "this route has not
|
|
4549
|
-
in months" is exactly the number #1945 exists to produce,
|
|
4550
|
-
windowed report would silently hide the very evidence retirement
|
|
4551
|
-
``query_audit_log`` orders newest-first, so ``last_call`` is
|
|
4552
|
-
even if the walk is truncated by the page cap;
|
|
4553
|
-
|
|
4554
|
-
|
|
4555
|
-
|
|
4623
|
+
``fetch``/``routes``/``retention_days`` are test seams (mirrors every
|
|
4624
|
+
other ``run_*``'s ``fetch=`` seam). Production always walks the FULL
|
|
4625
|
+
audit history (``since=0``), never a recent window — "this route has not
|
|
4626
|
+
been called in months" is exactly the number #1945 exists to produce,
|
|
4627
|
+
and a windowed report would silently hide the very evidence retirement
|
|
4628
|
+
needs. ``query_audit_log`` orders newest-first, so ``last_call`` is
|
|
4629
|
+
accurate even if the walk is truncated by the page cap; ``clients``/
|
|
4630
|
+
``call_count``, and ``observed_secs``/``eligible`` (#1947) — which is
|
|
4631
|
+
seeded from the OLDEST entry in the walk — could then UNDERSTATE the
|
|
4632
|
+
true observed window (the oldest rows are exactly what truncation drops
|
|
4633
|
+
first), which is called out in a note exactly like every other truncated
|
|
4634
|
+
fold in this module. Understating is the safe direction for a
|
|
4635
|
+
retirement gate: it can only make `eligible` harder to earn, never
|
|
4636
|
+
easier.
|
|
4637
|
+
|
|
4638
|
+
``retention_days`` defaults to :func:`coord.audit.
|
|
4639
|
+
resolve_operational_retention_days` — the SAME number
|
|
4640
|
+
``coord.audit.sweep_operational_retention`` caps itself to, read here
|
|
4641
|
+
(the impure runner that already owns the clock and the DB walk) rather
|
|
4642
|
+
than inside the pure fold, so a direct fold caller never gets a
|
|
4643
|
+
host-dependent answer. Passing it explicitly is the test seam.
|
|
4556
4644
|
"""
|
|
4557
4645
|
generated_at = time.time() if now is None else float(now)
|
|
4646
|
+
if retention_days is None:
|
|
4647
|
+
from coord.audit import resolve_operational_retention_days # noqa: PLC0415
|
|
4648
|
+
|
|
4649
|
+
retention_days = resolve_operational_retention_days()
|
|
4558
4650
|
fetch_fn = _default_fetch_deprecation_entries if fetch is None else fetch
|
|
4559
4651
|
entries, truncated = fetch_fn(generated_at)
|
|
4560
|
-
result = fold_deprecated_routes(
|
|
4652
|
+
result = fold_deprecated_routes(
|
|
4653
|
+
entries, generated_at, routes=routes, retention_days=retention_days
|
|
4654
|
+
)
|
|
4561
4655
|
if truncated:
|
|
4562
4656
|
result.notes.append(
|
|
4563
4657
|
"Audit history walk hit its page cap before covering the full "
|
|
4564
4658
|
"history — `clients`/`call_count` may be missing older calls, "
|
|
4565
|
-
"
|
|
4659
|
+
"and `observed_secs` may understate the true window (the "
|
|
4660
|
+
"oldest rows are dropped first), though `last_call` "
|
|
4661
|
+
"(newest-first order) is still accurate."
|
|
4566
4662
|
)
|
|
4567
4663
|
return result
|
|
4568
4664
|
|
|
@@ -4959,7 +5055,14 @@ DEPRECATED_ROUTES = ReportDef(
|
|
|
4959
5055
|
"count — evidence for retirement instead of belief (#1945). "
|
|
4960
5056
|
"`status` distinguishes `in_use` from `zero_calls` (a real, "
|
|
4961
5057
|
"actionable signal) from `no_data` (telemetry not confirmed live — "
|
|
4962
|
-
"never safe to read as `zero_calls`)."
|
|
5058
|
+
"never safe to read as `zero_calls`). `eligible` is #1947's own "
|
|
5059
|
+
"gate verdict: `eligible` only when `status` is `zero_calls` AND "
|
|
5060
|
+
"`observed_secs` (capped at `audit.operational_retention_days`, "
|
|
5061
|
+
"never a config-trusting guess) covers at least 30 days — `not_yet` "
|
|
5062
|
+
"otherwise. A route's own `eligible` reading is still only one of "
|
|
5063
|
+
"#1947's three gate conditions; `coord release verify` showing "
|
|
5064
|
+
"every lane past the client migration is the other, checked "
|
|
5065
|
+
"separately."
|
|
4963
5066
|
),
|
|
4964
5067
|
params=(),
|
|
4965
5068
|
run=run_deprecated_routes,
|