code-coordinator 0.5.317__tar.gz → 0.5.319__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.317 → code_coordinator-0.5.319}/PKG-INFO +1 -1
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/confirm_test.py +171 -2
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/db.py +15 -1
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notify.py +132 -22
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_confirm_test.py +193 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_db.py +150 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notify_drain.py +78 -4
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_roll_window_handoff.py +11 -4
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_sqlite_connect_ratchet.py +19 -2
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_stuck_test_state_watchdog_2803.py +18 -2
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/.gitignore +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/CLAUDE.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/GOAL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/LICENSE +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/MANIFEST.in +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/README.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/__init__.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/agent.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/audit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/block_log.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/board_service.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/brain.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/claim.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/cli.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/client.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/comments.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/config.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/dao.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/deps.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/drive.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/events.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/filelock.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/freshness.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/gates.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/goal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/context.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/models.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/render.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/health/units.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/hooks.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/interactive.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/models.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/network.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/openapi.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/parentage.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/plans.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/progress.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/release_window.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/reports.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/review.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/self_health.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/smoke.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/split_work.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/sql.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/state.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/test_author.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/test_report.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/usage.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/install-agent.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/pyproject.toml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/setup.cfg +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/__init__.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/backends.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/conftest.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_config.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_events.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_init.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_models.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_network.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_review.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_session.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_split.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_state.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.317 → code_coordinator-0.5.319}/tests/write_parity.py +0 -0
|
@@ -171,6 +171,23 @@ CONFIRM_DEFAULT_TIMEOUT_SECONDS = 60 * 20
|
|
|
171
171
|
#: so a pass can confirm ~4 branches back to back) while the daemon-side worst
|
|
172
172
|
#: case stays a number the thin client can actually be given — see
|
|
173
173
|
#: :func:`notify_client_timeout_seconds`.
|
|
174
|
+
#:
|
|
175
|
+
#: #2975: that "~6 min serial" sizing is calibrated on THIS repo and does not
|
|
176
|
+
#: hold everywhere — quadraui's ``cargo test --features tui`` builds every
|
|
177
|
+
#: example/test executable (#305 in coordinator.yml) and blows straight past
|
|
178
|
+
#: it, and every ceiling in this module (this one, ``CONFIRM_DEFAULT_
|
|
179
|
+
#: TIMEOUT_SECONDS``, ``deploy/coord-notify.service``'s ``TimeoutStartSec``)
|
|
180
|
+
#: is bigger than ``coord-notify.timer``'s 5-minute cadence, so one such
|
|
181
|
+
#: confirmation can span several fires. Two changes close that without
|
|
182
|
+
#: shrinking this constant (which would just make the COMMON case degrade to
|
|
183
|
+
#: UNCONFIRMED instead): ``coord.notify``'s drain now dispatches pending
|
|
184
|
+
#: Test/Review/PR-opens BEFORE running any confirmation each pass, so a slow
|
|
185
|
+
#: suite on one repo can no longer queue another repo's dispatch behind it;
|
|
186
|
+
#: and :func:`expected_confirmation_seconds` remembers how long a repo's
|
|
187
|
+
#: confirmation last took, so :func:`confirmation_timeout` can recognise a
|
|
188
|
+
#: repo whose suite structurally cannot fit this budget and skip straight to
|
|
189
|
+
#: UNCONFIRMED instead of re-discovering that identical fact — and re-paying
|
|
190
|
+
#: the full ceiling for it — on every single PASS claim.
|
|
174
191
|
CONFIRM_PASS_BUDGET_SECONDS = 60 * 25
|
|
175
192
|
|
|
176
193
|
#: Don't *start* a confirmation with less than this left in the pass budget.
|
|
@@ -232,6 +249,31 @@ KIND_NO_OUTPUT = "no_output"
|
|
|
232
249
|
#: docstring's fail-direction section — this frozenset IS that safety property.
|
|
233
250
|
REFUTING_KINDS = frozenset({KIND_BUILD, KIND_SUITE})
|
|
234
251
|
|
|
252
|
+
#: #2975: kinds whose elapsed wall-clock time is a trustworthy signal of how
|
|
253
|
+
#: long THIS repo's confirmation genuinely takes, worth remembering for next
|
|
254
|
+
#: time via :func:`record_confirmation_duration`.
|
|
255
|
+
#:
|
|
256
|
+
#: ``KIND_OK``/``KIND_BUILD``/``KIND_SUITE``/``KIND_BASELINE_RED``/
|
|
257
|
+
#: ``KIND_NO_OUTPUT`` all ran the command to actual completion — a real
|
|
258
|
+
#: measurement. ``KIND_TIMEOUT`` ran for at least the ceiling it was given —
|
|
259
|
+
#: not exact, but a valid LOWER BOUND, and a lower bound is exactly what lets
|
|
260
|
+
#: a chronically-too-slow repo (quadraui's ``cargo test --features tui``
|
|
261
|
+
#: builds every example/test executable, #305 in coordinator.yml) be
|
|
262
|
+
#: recognised as such after a single attempt instead of re-discovering it on
|
|
263
|
+
#: every PASS claim — see :func:`expected_confirmation_seconds`.
|
|
264
|
+
#:
|
|
265
|
+
#: ``KIND_SETUP``/``KIND_INFRA``/``KIND_SIGNAL`` are deliberately excluded:
|
|
266
|
+
#: none of them ran the real command for a representative duration (no
|
|
267
|
+
#: checkout, no toolchain, or killed externally mid-run), and recording their
|
|
268
|
+
#: near-zero elapsed time would silently erase a previously-learned
|
|
269
|
+
#: expectation — exactly the failure mode that would make a single lock
|
|
270
|
+
#: contention hiccup or a missing checkout reset a repo's hard-won "this one
|
|
271
|
+
#: is slow" memory back to "assume it's fast."
|
|
272
|
+
RECORDABLE_DURATION_KINDS = frozenset({
|
|
273
|
+
KIND_OK, KIND_BUILD, KIND_SUITE, KIND_BASELINE_RED, KIND_NO_OUTPUT,
|
|
274
|
+
KIND_TIMEOUT,
|
|
275
|
+
})
|
|
276
|
+
|
|
235
277
|
#: Kinds meaning "the check could not reach a verdict". The caller falls back to
|
|
236
278
|
#: the worker's own claim on any of these, which is pre-#2464 behaviour.
|
|
237
279
|
INCONCLUSIVE_KINDS = frozenset({
|
|
@@ -270,7 +312,7 @@ def begin_confirmation_pass(total: float = CONFIRM_PASS_BUDGET_SECONDS) -> None:
|
|
|
270
312
|
_pass_state.remaining = float(total)
|
|
271
313
|
|
|
272
314
|
|
|
273
|
-
def confirmation_timeout() -> int | None:
|
|
315
|
+
def confirmation_timeout(expected_seconds: float | None = None) -> int | None:
|
|
274
316
|
"""Seconds the next confirmation in this pass may take, or ``None``.
|
|
275
317
|
|
|
276
318
|
``None`` means the pass budget is spent (or too nearly spent to be worth
|
|
@@ -279,13 +321,31 @@ def confirmation_timeout() -> int | None:
|
|
|
279
321
|
|
|
280
322
|
Outside a pass — a direct :func:`confirm_branch` call, a unit test — there
|
|
281
323
|
is no budget to draw down and the full per-run ceiling applies.
|
|
324
|
+
|
|
325
|
+
*expected_seconds* (#2975) is the caller's best estimate of how long THIS
|
|
326
|
+
repo's confirmation will actually take — see
|
|
327
|
+
:func:`expected_confirmation_seconds`, which reads it back from what
|
|
328
|
+
:func:`record_confirmation_duration` learned last time. When it is
|
|
329
|
+
already at or past what this pass has left to spend, starting the run
|
|
330
|
+
would only spend the remainder re-discovering a fact already on record —
|
|
331
|
+
this repo cannot be confirmed in what is left — so this returns ``None``
|
|
332
|
+
immediately instead of paying for that discovery again. This is what
|
|
333
|
+
turns a repo whose suite structurally cannot fit the ceiling (quadraui's
|
|
334
|
+
``cargo test --features tui``, #2975) from a repeated worst-case cost —
|
|
335
|
+
every PASS claim spending the full budget to learn the identical lesson —
|
|
336
|
+
into a one-time one: the FIRST attempt still spends up to the full
|
|
337
|
+
ceiling discovering the suite is too slow, and every attempt after that
|
|
338
|
+
skips straight to UNCONFIRMED.
|
|
282
339
|
"""
|
|
283
340
|
remaining = getattr(_pass_state, "remaining", None)
|
|
284
341
|
if remaining is None:
|
|
285
342
|
return int(CONFIRM_DEFAULT_TIMEOUT_SECONDS)
|
|
286
343
|
if remaining < CONFIRM_MIN_RUN_SECONDS:
|
|
287
344
|
return None
|
|
288
|
-
|
|
345
|
+
ceiling = min(float(CONFIRM_DEFAULT_TIMEOUT_SECONDS), remaining)
|
|
346
|
+
if expected_seconds is not None and expected_seconds >= ceiling:
|
|
347
|
+
return None
|
|
348
|
+
return int(ceiling)
|
|
289
349
|
|
|
290
350
|
|
|
291
351
|
def spend_confirmation_budget(seconds: float) -> None:
|
|
@@ -300,6 +360,112 @@ def spend_confirmation_budget(seconds: float) -> None:
|
|
|
300
360
|
_pass_state.remaining = max(0.0, remaining - max(0.0, float(seconds)))
|
|
301
361
|
|
|
302
362
|
|
|
363
|
+
#: #2975: filename under ``COORD_DIR`` for the per-repo measured-duration map
|
|
364
|
+
#: :func:`record_confirmation_duration` / :func:`expected_confirmation_seconds`
|
|
365
|
+
#: read and write. A tiny flat file, not a lock-guarded store: the worst case
|
|
366
|
+
#: of a torn read/write is one stale or missing estimate, which degrades to
|
|
367
|
+
#: exactly pre-#2975 behaviour (attempt the run, learn the hard way) — never
|
|
368
|
+
#: a correctness problem, so it does not warrant the ceremony
|
|
369
|
+
#: ``confirm_lock_path`` needs for the worktree lifecycle it guards.
|
|
370
|
+
_CONFIRM_HISTORY_FILENAME = "confirm_test_history.json"
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
def _confirm_history_path() -> Path:
|
|
374
|
+
"""Where per-repo measured confirmation durations are persisted (#2975).
|
|
375
|
+
|
|
376
|
+
Resolved against ``coord.state.COORD_DIR`` freshly on every call — the
|
|
377
|
+
same discipline :func:`confirm_worktree_path` /
|
|
378
|
+
:func:`write_confirmation_output` already use above — so a test's
|
|
379
|
+
``monkeypatch.setattr("coord.state.COORD_DIR", ...)`` is honoured rather
|
|
380
|
+
than this module caching a stale path at import time.
|
|
381
|
+
"""
|
|
382
|
+
from coord.state import COORD_DIR # noqa: PLC0415
|
|
383
|
+
|
|
384
|
+
return COORD_DIR / _CONFIRM_HISTORY_FILENAME
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def _load_confirm_history() -> dict[str, float]:
|
|
388
|
+
"""Best-effort read of the persisted per-repo duration map.
|
|
389
|
+
|
|
390
|
+
Fail-soft on everything — a missing file, corrupt JSON, an unexpected
|
|
391
|
+
shape, a hand-edited value — because this is purely an optimisation hint
|
|
392
|
+
for :func:`confirmation_timeout`, never a correctness dependency. A file
|
|
393
|
+
this cannot make sense of must read as "nothing learned yet", the same
|
|
394
|
+
posture as :func:`coord.commands.drive_queue.read_roll_pending`.
|
|
395
|
+
"""
|
|
396
|
+
import json # noqa: PLC0415
|
|
397
|
+
|
|
398
|
+
try:
|
|
399
|
+
raw = _confirm_history_path().read_text(encoding="utf-8")
|
|
400
|
+
except OSError:
|
|
401
|
+
return {}
|
|
402
|
+
try:
|
|
403
|
+
data = json.loads(raw)
|
|
404
|
+
except ValueError:
|
|
405
|
+
return {}
|
|
406
|
+
if not isinstance(data, dict):
|
|
407
|
+
return {}
|
|
408
|
+
out: dict[str, float] = {}
|
|
409
|
+
for key, value in data.items():
|
|
410
|
+
if isinstance(key, str) and isinstance(value, (int, float)) and value > 0:
|
|
411
|
+
out[key] = float(value)
|
|
412
|
+
return out
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
def record_confirmation_duration(repo_name: str, seconds: float) -> None:
|
|
416
|
+
"""Remember how long *repo_name*'s confirmation attempt just took (#2975).
|
|
417
|
+
|
|
418
|
+
Callers pass this only results whose ``kind`` is in
|
|
419
|
+
:data:`RECORDABLE_DURATION_KINDS` — see that frozenset's docstring for
|
|
420
|
+
which outcomes are a trustworthy signal of real suite duration.
|
|
421
|
+
|
|
422
|
+
Overwrites any previous value for this repo outright, with no averaging:
|
|
423
|
+
the LAST attempt is a better estimate of the CURRENT suite than a rolling
|
|
424
|
+
average across however long ago the repo's test suite was this size.
|
|
425
|
+
|
|
426
|
+
Best-effort and atomic (tempfile-then-rename, mirroring
|
|
427
|
+
:func:`coord.commands.drive_queue.write_roll_pending`) — a full disk, an
|
|
428
|
+
unwritable ``COORD_DIR``, or a concurrent writer must not break the
|
|
429
|
+
confirmation this is charging against; the caller already has its real
|
|
430
|
+
result, this is purely a hint for next time.
|
|
431
|
+
"""
|
|
432
|
+
if seconds <= 0:
|
|
433
|
+
return
|
|
434
|
+
import json # noqa: PLC0415
|
|
435
|
+
import tempfile # noqa: PLC0415
|
|
436
|
+
|
|
437
|
+
path = _confirm_history_path()
|
|
438
|
+
history = _load_confirm_history()
|
|
439
|
+
history[repo_name] = float(seconds)
|
|
440
|
+
try:
|
|
441
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
442
|
+
fd, tmp_name = tempfile.mkstemp(
|
|
443
|
+
prefix=".confirm_test_history.", suffix=".tmp", dir=str(path.parent),
|
|
444
|
+
)
|
|
445
|
+
try:
|
|
446
|
+
with os.fdopen(fd, "w", encoding="utf-8") as fh:
|
|
447
|
+
json.dump(history, fh)
|
|
448
|
+
os.replace(tmp_name, path)
|
|
449
|
+
except OSError:
|
|
450
|
+
try:
|
|
451
|
+
os.unlink(tmp_name)
|
|
452
|
+
except OSError:
|
|
453
|
+
pass
|
|
454
|
+
except OSError:
|
|
455
|
+
pass
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
def expected_confirmation_seconds(repo_name: str) -> float | None:
|
|
459
|
+
"""The most recently measured confirmation duration for *repo_name*.
|
|
460
|
+
|
|
461
|
+
``None`` when this repo has never produced a
|
|
462
|
+
:data:`RECORDABLE_DURATION_KINDS` result — the common case for most
|
|
463
|
+
repos most of the time, and the caller's cue to fall back to the
|
|
464
|
+
un-informed ceiling exactly as before #2975.
|
|
465
|
+
"""
|
|
466
|
+
return _load_confirm_history().get(repo_name)
|
|
467
|
+
|
|
468
|
+
|
|
303
469
|
def notify_client_timeout_seconds(
|
|
304
470
|
budget: float = CONFIRM_PASS_BUDGET_SECONDS,
|
|
305
471
|
) -> float:
|
|
@@ -1067,6 +1233,7 @@ __all__ = [
|
|
|
1067
1233
|
"KIND_SIGNAL",
|
|
1068
1234
|
"NOTIFY_BASE_CLIENT_TIMEOUT_SECONDS",
|
|
1069
1235
|
"PERMISSION_DENIED_EXIT",
|
|
1236
|
+
"RECORDABLE_DURATION_KINDS",
|
|
1070
1237
|
"REFUTING_KINDS",
|
|
1071
1238
|
"STALE_WORKTREE_MAX_AGE_HOURS",
|
|
1072
1239
|
"ConfirmationResult",
|
|
@@ -1077,7 +1244,9 @@ __all__ = [
|
|
|
1077
1244
|
"confirm_worktree_path",
|
|
1078
1245
|
"confirmation_enabled",
|
|
1079
1246
|
"confirmation_timeout",
|
|
1247
|
+
"expected_confirmation_seconds",
|
|
1080
1248
|
"notify_client_timeout_seconds",
|
|
1249
|
+
"record_confirmation_duration",
|
|
1081
1250
|
"spend_confirmation_budget",
|
|
1082
1251
|
"sweep_stale_confirm_worktrees",
|
|
1083
1252
|
"unmet_confirmation_capabilities",
|
|
@@ -1775,13 +1775,27 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
|
|
|
1775
1775
|
error raised for a duplicate column (SQLite's ``OperationalError``;
|
|
1776
1776
|
Postgres's equivalent under ``sql.driver_errors()``, #2784) is silently
|
|
1777
1777
|
swallowed.
|
|
1778
|
+
|
|
1779
|
+
#2982: Postgres aborts the whole transaction on a failed statement, so
|
|
1780
|
+
without a ``conn.rollback()`` here the *first* duplicate ALTER (every
|
|
1781
|
+
entry in ``_MIGRATE_ADD_COLUMNS`` is one, against a freshly-created
|
|
1782
|
+
schema) leaves the connection unusable -- every statement after it,
|
|
1783
|
+
including the remaining ALTERs and ``_set_schema_version``'s own
|
|
1784
|
+
``DELETE FROM schema_version``, fails with
|
|
1785
|
+
``psycopg.errors.InFailedSqlTransaction``. SQLite has no such concept
|
|
1786
|
+
(a failed statement there doesn't touch the transaction), so the
|
|
1787
|
+
rollback is a no-op on that backend -- and by this point in
|
|
1788
|
+
``_ensure_schema`` there is nothing uncommitted to lose on either
|
|
1789
|
+
backend: the schema script already committed, and each successful ALTER
|
|
1790
|
+
in this loop commits immediately, so a rollback can only ever discard
|
|
1791
|
+
the one statement that just failed.
|
|
1778
1792
|
"""
|
|
1779
1793
|
for ddl in _MIGRATE_ADD_COLUMNS:
|
|
1780
1794
|
try:
|
|
1781
1795
|
sql.execute(conn, ddl)
|
|
1782
1796
|
conn.commit()
|
|
1783
1797
|
except sql.driver_errors():
|
|
1784
|
-
|
|
1798
|
+
conn.rollback() # Column already exists; Postgres needs the tx cleared
|
|
1785
1799
|
|
|
1786
1800
|
|
|
1787
1801
|
# ── JSON migration ─────────────────────────────────────────────────────────────
|
|
@@ -2033,9 +2033,12 @@ def _run_pass_confirmation(transition: Transition, entry: dict):
|
|
|
2033
2033
|
that cannot run must degrade to pre-#2464 behaviour, never break the reap.
|
|
2034
2034
|
"""
|
|
2035
2035
|
from coord.confirm_test import ( # noqa: PLC0415
|
|
2036
|
+
RECORDABLE_DURATION_KINDS,
|
|
2036
2037
|
confirm_branch,
|
|
2037
2038
|
confirmation_enabled,
|
|
2038
2039
|
confirmation_timeout,
|
|
2040
|
+
expected_confirmation_seconds,
|
|
2041
|
+
record_confirmation_duration,
|
|
2039
2042
|
spend_confirmation_budget,
|
|
2040
2043
|
)
|
|
2041
2044
|
|
|
@@ -2066,15 +2069,34 @@ def _run_pass_confirmation(transition: Transition, entry: dict):
|
|
|
2066
2069
|
# `/notify` request the thin client is blocked on — scale with board
|
|
2067
2070
|
# activity. Exhausted budget means UNCONFIRMED, which is pre-#2464
|
|
2068
2071
|
# behaviour, and it is said out loud rather than truncating silently.
|
|
2069
|
-
|
|
2072
|
+
#
|
|
2073
|
+
# #2975: also hand in whatever this repo's OWN last confirmation measured
|
|
2074
|
+
# (`expected_confirmation_seconds`) — a repo whose suite structurally
|
|
2075
|
+
# cannot finish inside the budget (quadraui's `cargo test --features
|
|
2076
|
+
# tui`) would otherwise spend the full ceiling relearning that identical
|
|
2077
|
+
# fact on every single PASS claim, serialising every other repo's Test/
|
|
2078
|
+
# Review dispatch behind it each time. Knowing the answer already lets
|
|
2079
|
+
# `confirmation_timeout` skip straight to UNCONFIRMED instead.
|
|
2080
|
+
expected = expected_confirmation_seconds(transition.repo_name)
|
|
2081
|
+
timeout = confirmation_timeout(expected)
|
|
2070
2082
|
if timeout is None:
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2083
|
+
if expected is not None:
|
|
2084
|
+
log.warning(
|
|
2085
|
+
"smoke %s: %s's last measured confirmation took about %.0fs, "
|
|
2086
|
+
"at or beyond what this pass has left to spend — skipping "
|
|
2087
|
+
"the run and recording the worker's own claim UNCONFIRMED "
|
|
2088
|
+
"rather than repeating a run already known not to finish "
|
|
2089
|
+
"(#2975).",
|
|
2090
|
+
transition.assignment_id, transition.repo_name, expected,
|
|
2091
|
+
)
|
|
2092
|
+
else:
|
|
2093
|
+
log.warning(
|
|
2094
|
+
"smoke %s: this notify pass has spent its confirmation budget "
|
|
2095
|
+
"(coord.confirm_test.CONFIRM_PASS_BUDGET_SECONDS) — recording the "
|
|
2096
|
+
"worker's own claim for %s UNCONFIRMED rather than holding "
|
|
2097
|
+
"notify.lock any longer (#2464).",
|
|
2098
|
+
transition.assignment_id, transition.repo_name,
|
|
2099
|
+
)
|
|
2078
2100
|
return None
|
|
2079
2101
|
|
|
2080
2102
|
branch = entry.get("branch")
|
|
@@ -2084,10 +2106,12 @@ def _run_pass_confirmation(transition: Transition, entry: dict):
|
|
|
2084
2106
|
transition.assignment_id, transition.repo_name, branch, timeout,
|
|
2085
2107
|
)
|
|
2086
2108
|
started = time.monotonic()
|
|
2109
|
+
result: ConfirmationResult | None = None
|
|
2087
2110
|
try:
|
|
2088
|
-
|
|
2111
|
+
result = confirm_branch(
|
|
2089
2112
|
transition.repo_name, branch, config, timeout=timeout,
|
|
2090
2113
|
)
|
|
2114
|
+
return result
|
|
2091
2115
|
except Exception as exc: # noqa: BLE001
|
|
2092
2116
|
log.warning(
|
|
2093
2117
|
"smoke %s: confirmation run raised (%s) — falling back to the "
|
|
@@ -2100,7 +2124,15 @@ def _run_pass_confirmation(transition: Transition, entry: dict):
|
|
|
2100
2124
|
# It really did hold the drain (and `notify.lock`) for those seconds,
|
|
2101
2125
|
# and a run that reliably blows up after ten minutes must not be able
|
|
2102
2126
|
# to repeat that for every row on the board free of charge.
|
|
2103
|
-
|
|
2127
|
+
elapsed = time.monotonic() - started
|
|
2128
|
+
spend_confirmation_budget(elapsed)
|
|
2129
|
+
# #2975: only remember the duration when the result is actually a
|
|
2130
|
+
# trustworthy measurement (see RECORDABLE_DURATION_KINDS) — an
|
|
2131
|
+
# exception, a disabled config load, or a KIND_SETUP/INFRA/SIGNAL
|
|
2132
|
+
# short-circuit tells us nothing about how long the real suite takes
|
|
2133
|
+
# and must never overwrite a previously-learned expectation.
|
|
2134
|
+
if result is not None and result.kind in RECORDABLE_DURATION_KINDS:
|
|
2135
|
+
record_confirmation_duration(transition.repo_name, elapsed)
|
|
2104
2136
|
|
|
2105
2137
|
|
|
2106
2138
|
def _confirmed_pass_verdict(
|
|
@@ -4155,6 +4187,20 @@ def run_drain(
|
|
|
4155
4187
|
*notifications*, not pipeline advancement, and giving the daemon a
|
|
4156
4188
|
periodic detector is #1632's job (which is blocked on this).
|
|
4157
4189
|
|
|
4190
|
+
**Dispatch order (#2975).** Smoke/review/PR-open dispatch also runs as a
|
|
4191
|
+
HEAD START right at the top of the pass, before this pass's own
|
|
4192
|
+
transition detection (which is where a #2464 out-of-band confirmation
|
|
4193
|
+
runs — see :mod:`coord.confirm_test`). A confirmation re-runs a repo's
|
|
4194
|
+
real build+test synchronously and can hold this very lock for the whole
|
|
4195
|
+
confirmation-pass budget, several timer fires' worth for a repo whose
|
|
4196
|
+
suite is structurally too slow. Every row already eligible for dispatch
|
|
4197
|
+
as of the top of the pass must not queue behind that — a slow suite on
|
|
4198
|
+
one repo must delay only its own confirmation, never another repo's
|
|
4199
|
+
Test/Review dispatch. The three dispatch functions run a second time
|
|
4200
|
+
afterward too, in their historical place, to pick up anything the
|
|
4201
|
+
transition-detection step below made newly eligible; all three are
|
|
4202
|
+
idempotent, so the repeat costs only a second, mostly-empty scan.
|
|
4203
|
+
|
|
4158
4204
|
**Concurrency.** The whole pass runs under ``~/.coord/notify.lock`` —
|
|
4159
4205
|
literally :class:`coord.filelock.FileLock`, the same class on the same
|
|
4160
4206
|
path ``coord drive``'s ``run_notify()`` takes — so a drive's nudge and the
|
|
@@ -4203,6 +4249,56 @@ def _run_drain_locked(config: Config) -> DrainResult:
|
|
|
4203
4249
|
|
|
4204
4250
|
begin_confirmation_pass()
|
|
4205
4251
|
|
|
4252
|
+
# Step 0a (#2803, moved up by #2975): clear any work row wedged at
|
|
4253
|
+
# test_state='running' well past its Test-stage child's own terminal
|
|
4254
|
+
# resolution (or absence) — a lost verdict write, never a fabricated one
|
|
4255
|
+
# (see `sweep_stuck_test_state_rows`'s docstring). It still runs BEFORE
|
|
4256
|
+
# every smoke dispatch in this pass, which is #2803's invariant: a row
|
|
4257
|
+
# this clears is picked up and redispatched in THIS SAME pass, not the
|
|
4258
|
+
# next one. It now runs before step 0b's head start as well, so a row it
|
|
4259
|
+
# clears gets that head start too rather than waiting behind step 1's
|
|
4260
|
+
# confirmations. Nothing is lost by sweeping before transition detection:
|
|
4261
|
+
# every case the sweep acts on is gated on
|
|
4262
|
+
# `STUCK_TEST_STATE_GRACE_SECONDS` (10 minutes) having elapsed since the
|
|
4263
|
+
# child's own resolution, so a child that only just went terminal in
|
|
4264
|
+
# THIS pass is out of scope either way.
|
|
4265
|
+
try:
|
|
4266
|
+
_sweep_stuck_test_state(config)
|
|
4267
|
+
except Exception: # noqa: BLE001
|
|
4268
|
+
log.exception("notify drain: stuck test_state sweep failed")
|
|
4269
|
+
|
|
4270
|
+
# Step 0b (#2975): dispatch pending Test-stage smoke / PR-opens / reviews
|
|
4271
|
+
# from the board exactly as it reads RIGHT NOW — before step 1 below gets
|
|
4272
|
+
# anywhere near a `confirm_branch` call. A confirmation re-runs one
|
|
4273
|
+
# repo's real build+test synchronously inside THIS pass and can
|
|
4274
|
+
# legitimately hold `notify.lock` for the whole `CONFIRM_PASS_BUDGET_
|
|
4275
|
+
# SECONDS` ceiling — several `coord-notify.timer` fires' worth (#2975).
|
|
4276
|
+
# Every row already eligible for dispatch as of the top of this pass
|
|
4277
|
+
# must not queue behind that: a slow suite on one repo should delay only
|
|
4278
|
+
# its own confirmation, never another repo's Test/Review dispatch.
|
|
4279
|
+
#
|
|
4280
|
+
# Steps 2-3 below repeat these same three calls after the transition
|
|
4281
|
+
# detection has had a chance to add anything newly eligible (a work leg
|
|
4282
|
+
# that just finished, a PR that just opened) — this head start is
|
|
4283
|
+
# additive, not a replacement.
|
|
4284
|
+
# All three are idempotent (`_dispatch_board_pending_pr_opens`'s and
|
|
4285
|
+
# `_dispatch_board_pending_smoke`'s own docstrings: "safe to call even
|
|
4286
|
+
# when the board file doesn't exist", find-or-create PRs, dedupe via
|
|
4287
|
+
# `has_active_followup`), so calling each twice in one pass costs
|
|
4288
|
+
# nothing beyond a second, mostly-empty scan.
|
|
4289
|
+
try:
|
|
4290
|
+
_dispatch_board_pending_pr_opens(config)
|
|
4291
|
+
except Exception: # noqa: BLE001
|
|
4292
|
+
log.exception("notify drain: head-start PR-open dispatch failed")
|
|
4293
|
+
try:
|
|
4294
|
+
_dispatch_board_pending_smoke(config)
|
|
4295
|
+
except Exception: # noqa: BLE001
|
|
4296
|
+
log.exception("notify drain: head-start smoke dispatch failed")
|
|
4297
|
+
try:
|
|
4298
|
+
_dispatch_board_pending_reviews(config)
|
|
4299
|
+
except Exception: # noqa: BLE001
|
|
4300
|
+
log.exception("notify drain: head-start review dispatch failed")
|
|
4301
|
+
|
|
4206
4302
|
# Step 1: post completion/failure/advisory/plan/review comments for rows
|
|
4207
4303
|
# the agent reports terminal. This is what stamps `finished_at` (via
|
|
4208
4304
|
# mark_notified) and captures cost / SMOKE_TESTS / summary / session id /
|
|
@@ -4234,18 +4330,7 @@ def _run_drain_locked(config: Config) -> DrainResult:
|
|
|
4234
4330
|
except Exception: # noqa: BLE001
|
|
4235
4331
|
log.exception("notify drain: detect_transitions failed")
|
|
4236
4332
|
|
|
4237
|
-
# Step 2 (#
|
|
4238
|
-
# past its Test-stage child's own terminal resolution (or absence) — a
|
|
4239
|
-
# lost verdict write, never a fabricated one (see `sweep_stuck_test_
|
|
4240
|
-
# state_rows`'s docstring). Runs BEFORE step 3's smoke dispatch so a row
|
|
4241
|
-
# this clears is picked up and redispatched in THIS SAME pass, not the
|
|
4242
|
-
# next one.
|
|
4243
|
-
try:
|
|
4244
|
-
_sweep_stuck_test_state(config)
|
|
4245
|
-
except Exception: # noqa: BLE001
|
|
4246
|
-
log.exception("notify drain: stuck test_state sweep failed")
|
|
4247
|
-
|
|
4248
|
-
# Step 2.5 (#2844): open PRs for work-leg completions still missing one —
|
|
4333
|
+
# Step 2 (#2844): open PRs for work-leg completions still missing one —
|
|
4249
4334
|
# BEFORE the Test-stage dispatch below, so the pull_request CI run starts
|
|
4250
4335
|
# overlapping smoke instead of waiting for review dispatch to open the
|
|
4251
4336
|
# PR ~20 minutes later.
|
|
@@ -4447,6 +4532,31 @@ def run(
|
|
|
4447
4532
|
# why this reads the marker but never writes it.
|
|
4448
4533
|
_roll_pending = _roll_pending_blocks_new_dispatch()
|
|
4449
4534
|
|
|
4535
|
+
# Step 0 (#2975): same head start `_run_drain_locked` takes, and for the
|
|
4536
|
+
# identical reason — dispatch pending Test-stage smoke / PR-opens /
|
|
4537
|
+
# reviews from the board exactly as it reads RIGHT NOW, before the
|
|
4538
|
+
# transition-detection loop below gets anywhere near a `confirm_branch`
|
|
4539
|
+
# call that can hold `notify.lock` for up to `CONFIRM_PASS_BUDGET_
|
|
4540
|
+
# SECONDS`. Gated on `_roll_pending` like every other NEW-leg dispatch in
|
|
4541
|
+
# this function (#2587) — the later calls to the same three functions,
|
|
4542
|
+
# a few dozen lines down, repeat this after the loop below has had a
|
|
4543
|
+
# chance to add anything newly eligible; this is a head start, not a
|
|
4544
|
+
# replacement, and all three are idempotent so calling each twice costs
|
|
4545
|
+
# only a second, mostly-empty scan.
|
|
4546
|
+
if not _roll_pending:
|
|
4547
|
+
try:
|
|
4548
|
+
_dispatch_board_pending_pr_opens(config)
|
|
4549
|
+
except Exception: # noqa: BLE001
|
|
4550
|
+
pass
|
|
4551
|
+
try:
|
|
4552
|
+
_dispatch_board_pending_smoke(config)
|
|
4553
|
+
except Exception: # noqa: BLE001
|
|
4554
|
+
pass
|
|
4555
|
+
try:
|
|
4556
|
+
_dispatch_board_pending_reviews(config)
|
|
4557
|
+
except Exception: # noqa: BLE001
|
|
4558
|
+
pass
|
|
4559
|
+
|
|
4450
4560
|
# #522: one terminal-state cache shared across every gh-hitting check in
|
|
4451
4561
|
# this notify run (the auto-loop review/fix dispatches below, and the
|
|
4452
4562
|
# #1441 stalled-pipeline sweep at the end), so a burst of activity for
|