code-coordinator 0.5.561__tar.gz → 0.5.563__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.561 → code_coordinator-0.5.563}/PKG-INFO +1 -1
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/acceptance.py +60 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/db.py +47 -1
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dispatch.py +73 -34
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/milestone_dispatch.py +49 -2
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notify.py +50 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/serve_app.py +104 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/state.py +155 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_acceptance.py +58 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_db.py +8 -1
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dispatch.py +136 -31
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notify.py +113 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_review_verdict_relay.py +120 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_state.py +97 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/.gitignore +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/CLAUDE.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/GOAL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/LICENSE +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/MANIFEST.in +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/README.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/__init__.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/agent.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/audit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/backup.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/block_log.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/board_service.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/brain.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/claim.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/cli.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/client.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/codegen.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/comments.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/config.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dao.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/deps.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/drive.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/events.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/filelock.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/freshness.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/gates.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/goal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/context.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/models.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/render.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/health/units.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/hooks.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/interactive.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/models.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/network.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/openapi.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/parentage.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/plans.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/progress.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/release_window.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/reports.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/review.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/self_health.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/smoke.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/split_work.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/sql.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/test_author.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/test_report.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/usage.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/install-agent.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/pyproject.toml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/setup.cfg +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/__init__.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/backends.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/conftest.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_client.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_config.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_events.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_init.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_models.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_network.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_review.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_session.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_split.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.561 → code_coordinator-0.5.563}/tests/write_parity.py +0 -0
|
@@ -877,6 +877,66 @@ def oracle_loop_contract_block(
|
|
|
877
877
|
if ms_dir is None:
|
|
878
878
|
return ""
|
|
879
879
|
|
|
880
|
+
return _render_oracle_contract_block(
|
|
881
|
+
repo_name, issue_number, ms_dir, acceptance_dirname, exempt=exempt,
|
|
882
|
+
)
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
def oracle_loop_contract_block_for_slice(
|
|
886
|
+
repo_name: str,
|
|
887
|
+
issue_number: int,
|
|
888
|
+
*,
|
|
889
|
+
has_slice: bool,
|
|
890
|
+
exempt: bool,
|
|
891
|
+
ms_dir: str,
|
|
892
|
+
acceptance_dirname: str = ACCEPTANCE_DIRNAME,
|
|
893
|
+
) -> str:
|
|
894
|
+
"""(#2166) The exact same worker-briefing contract text
|
|
895
|
+
:func:`oracle_loop_contract_block` renders, but driven by an already-
|
|
896
|
+
resolved verdict (*has_slice*/*exempt*/*ms_dir*/*acceptance_dirname*)
|
|
897
|
+
instead of scanning a local checkout for one.
|
|
898
|
+
|
|
899
|
+
Exists so :func:`coord.dispatch.dispatch` can build the briefing block
|
|
900
|
+
from the EXACT SAME read :func:`coord.milestone_dispatch.
|
|
901
|
+
issue_oracle_ready` already did for the #1138 hard gate (default
|
|
902
|
+
branch, over ``gh``, one memoised fetch seam) rather than a second,
|
|
903
|
+
independent local-checkout scan that can silently disagree with it —
|
|
904
|
+
the #2166 split-brain: a dispatching host whose base checkout lagged
|
|
905
|
+
the default branch by a few commits had this (the old
|
|
906
|
+
``oracle_loop_contract_block(Path, ...)`` call) come back ``""`` while
|
|
907
|
+
the gate, reading the default branch directly, had already let the
|
|
908
|
+
issue through — so the worker got dispatched with no oracle contract
|
|
909
|
+
at all, silently.
|
|
910
|
+
|
|
911
|
+
Returns ``""`` when *ms_dir* is empty (the gate never resolved a
|
|
912
|
+
milestone for this issue — ``OracleReadiness.applies`` was ``False``)
|
|
913
|
+
or neither *has_slice* nor *exempt* is set (no contract to point at
|
|
914
|
+
yet). Callers that have a full ``OracleReadiness`` in hand should pass
|
|
915
|
+
its ``has_slice``/``exempt``/``ms_dir``/``acceptance_dirname`` fields
|
|
916
|
+
straight through.
|
|
917
|
+
"""
|
|
918
|
+
if not ms_dir or not (has_slice or exempt):
|
|
919
|
+
return ""
|
|
920
|
+
return _render_oracle_contract_block(
|
|
921
|
+
repo_name, issue_number, ms_dir, acceptance_dirname, exempt=exempt,
|
|
922
|
+
)
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
def _render_oracle_contract_block(
|
|
926
|
+
repo_name: str,
|
|
927
|
+
issue_number: int,
|
|
928
|
+
ms_dir: str,
|
|
929
|
+
acceptance_dirname: str,
|
|
930
|
+
*,
|
|
931
|
+
exempt: bool,
|
|
932
|
+
) -> str:
|
|
933
|
+
"""Shared template for :func:`oracle_loop_contract_block` (local-
|
|
934
|
+
checkout scan) and :func:`oracle_loop_contract_block_for_slice`
|
|
935
|
+
(gate-verdict-driven, #2166) — ONE rendering so the text a worker sees
|
|
936
|
+
can never drift between the two slice-presence sources, even though
|
|
937
|
+
which SOURCE decided "there is a slice" differs between the two
|
|
938
|
+
callers.
|
|
939
|
+
"""
|
|
880
940
|
dirname = acceptance_dirname.rstrip("/") if acceptance_dirname else ACCEPTANCE_DIRNAME
|
|
881
941
|
contract_path = f"{dirname}/{ms_dir}/contract.md"
|
|
882
942
|
mocks_dir = f"{dirname}/{ms_dir}/mocks"
|
|
@@ -1087,7 +1087,27 @@ def retry_on_locked(
|
|
|
1087
1087
|
# knows the table exists: `_ensure_archive_mirror` itself, unconditionally
|
|
1088
1088
|
# and idempotently (`CREATE INDEX IF NOT EXISTS`) on every housekeeping
|
|
1089
1089
|
# sweep — see that function's own comment in coord/housekeeping.py.
|
|
1090
|
-
|
|
1090
|
+
#
|
|
1091
|
+
# #2468: bumped 21 -> 22 for the new `review_post_claims` TABLE above (not a
|
|
1092
|
+
# column — same shape as #3113/#3333's table-only bumps: `_migrate_add_
|
|
1093
|
+
# columns` below is unchanged, `CREATE TABLE IF NOT EXISTS` in `_SCHEMA_SQL`
|
|
1094
|
+
# is what actually creates it on an existing database). `_try_parse_and_
|
|
1095
|
+
# post_review` (the live completion path) and `post_orphaned_review_findings`
|
|
1096
|
+
# (the orphan sweep) both query "done reviews with `review_posted_at IS
|
|
1097
|
+
# NULL`" and only set `review_posted_at` AFTER successfully posting to
|
|
1098
|
+
# GitHub — two coordinator passes racing each other (one on the live path,
|
|
1099
|
+
# one on the orphan sweep, or two concurrent `coord notify` invocations) can
|
|
1100
|
+
# both see NULL and both post, producing the byte-identical duplicate-comment
|
|
1101
|
+
# incident on #2288 round 4 this closes. `coord.state.claim_review_post`
|
|
1102
|
+
# does the same conditional `INSERT ... OR IGNORE` + `rowcount` check
|
|
1103
|
+
# `claim_review_dispatch` already does for *dispatching* a review; the loser
|
|
1104
|
+
# of THIS claim skips *posting* it instead. Released
|
|
1105
|
+
# (`coord.state.release_review_post_claim`) only when the post attempt
|
|
1106
|
+
# itself fails, so a legitimate retry of a transient `gh`/GitHub failure
|
|
1107
|
+
# isn't permanently stranded — a successful post leaves the claim in place
|
|
1108
|
+
# forever, which is harmless since `review_posted_at` being set already
|
|
1109
|
+
# excludes the row from both callers' candidate queries.
|
|
1110
|
+
_DB_SCHEMA_VERSION = 22
|
|
1091
1111
|
|
|
1092
1112
|
|
|
1093
1113
|
def _read_schema_version(conn: sqlite3.Connection) -> int:
|
|
@@ -1981,6 +2001,32 @@ _SCHEMA_SQL = """
|
|
|
1981
2001
|
PRIMARY KEY (work_assignment_id, capability_partition)
|
|
1982
2002
|
);
|
|
1983
2003
|
|
|
2004
|
+
-- #2468: atomic review-POSTING claim — a sibling to `review_claims`
|
|
2005
|
+
-- above, but for the act of posting a review's findings to GitHub
|
|
2006
|
+
-- rather than dispatching the review worker. `_try_parse_and_post_
|
|
2007
|
+
-- review` (the live completion path, in `coord.notify`) and
|
|
2008
|
+
-- `post_orphaned_review_findings` (the orphan sweep, same module)
|
|
2009
|
+
-- both query "done review assignments with `review_posted_at IS
|
|
2010
|
+
-- NULL`" as their candidate set and only set `review_posted_at`
|
|
2011
|
+
-- AFTER the GitHub post succeeds — a classic check-then-act gap.
|
|
2012
|
+
-- Two coordinator passes racing each other (the #2468 incident: the
|
|
2013
|
+
-- identical "Review Complete" comment posted twice, 4 seconds apart,
|
|
2014
|
+
-- on #2288's round-4 review) each saw `review_posted_at IS NULL`
|
|
2015
|
+
-- and both posted. `coord.state.claim_review_post` does a
|
|
2016
|
+
-- conditional `INSERT ... OR IGNORE` keyed on `assignment_id` and
|
|
2017
|
+
-- checks `rowcount` to learn atomically whether THIS call gets to
|
|
2018
|
+
-- post; the loser skips instead of also posting a duplicate
|
|
2019
|
+
-- comment. Released (`coord.state.release_review_post_claim`) only
|
|
2020
|
+
-- when the post attempt itself fails, so a transient GitHub/`gh`
|
|
2021
|
+
-- failure doesn't permanently strand the row unposted — a
|
|
2022
|
+
-- successful post never releases the claim, which is harmless
|
|
2023
|
+
-- because `review_posted_at` being set already excludes the row
|
|
2024
|
+
-- from both callers' candidate queries from then on.
|
|
2025
|
+
CREATE TABLE IF NOT EXISTS review_post_claims (
|
|
2026
|
+
assignment_id TEXT PRIMARY KEY,
|
|
2027
|
+
claimed_at REAL NOT NULL
|
|
2028
|
+
);
|
|
2029
|
+
|
|
1984
2030
|
CREATE INDEX IF NOT EXISTS idx_assignments_status ON assignments(status);
|
|
1985
2031
|
CREATE INDEX IF NOT EXISTS idx_assignments_machine ON assignments(machine_name);
|
|
1986
2032
|
-- #3470: the `issue-cost` report's full-history scan groups every
|
|
@@ -12,6 +12,8 @@ import httpx
|
|
|
12
12
|
if TYPE_CHECKING:
|
|
13
13
|
from datetime import datetime
|
|
14
14
|
|
|
15
|
+
from coord.milestone_dispatch import OracleReadiness
|
|
16
|
+
|
|
15
17
|
from coord import github_ops
|
|
16
18
|
from coord.comments import (
|
|
17
19
|
format_advisory,
|
|
@@ -112,7 +114,7 @@ class DispatchRefused(ValueError):
|
|
|
112
114
|
|
|
113
115
|
def enforce_oracle_readiness(
|
|
114
116
|
*, proposal_type: str, repo: Repo | None, config: Config, issue_number: int,
|
|
115
|
-
) -> None:
|
|
117
|
+
) -> "OracleReadiness | None":
|
|
116
118
|
"""#1138: hard-gate a ``type="work"`` dispatch on the issue-level oracle
|
|
117
119
|
gate (:func:`coord.milestone_dispatch.issue_oracle_ready`) — refuses an
|
|
118
120
|
issue that belongs to an oracle-opted-in milestone (Gate A already
|
|
@@ -147,11 +149,23 @@ def enforce_oracle_readiness(
|
|
|
147
149
|
hard stop would turn a GitHub hiccup into a fleet-wide outage for every
|
|
148
150
|
oracle-configured repo, which is a worse failure mode than the gap
|
|
149
151
|
#1138 closes.
|
|
152
|
+
|
|
153
|
+
Returns the :class:`coord.milestone_dispatch.OracleReadiness` verdict
|
|
154
|
+
it computed (``None`` for every cheap-no-op / fail-open case above) —
|
|
155
|
+
(#2166) so ``dispatch()`` can build the worker-briefing oracle-loop
|
|
156
|
+
contract block from THIS SAME verdict instead of re-deriving "does a
|
|
157
|
+
slice exist" via a second, independent read. Before this, the gate
|
|
158
|
+
read the default branch over ``gh`` while the briefing separately
|
|
159
|
+
scanned the dispatching host's local base checkout for a manifest —
|
|
160
|
+
two sources that silently disagreed whenever that checkout lagged
|
|
161
|
+
(#2166's split-brain). One call, reused for both the pass/fail
|
|
162
|
+
decision and the text the worker sees, makes that disagreement
|
|
163
|
+
structurally impossible rather than merely rare.
|
|
150
164
|
"""
|
|
151
165
|
if proposal_type != "work" or repo is None:
|
|
152
|
-
return
|
|
166
|
+
return None
|
|
153
167
|
if not config.acceptance.has_driver(repo.name):
|
|
154
|
-
return
|
|
168
|
+
return None
|
|
155
169
|
|
|
156
170
|
from coord import github_ops # noqa: PLC0415
|
|
157
171
|
from coord.milestone_dispatch import issue_oracle_ready # noqa: PLC0415
|
|
@@ -159,7 +173,7 @@ def enforce_oracle_readiness(
|
|
|
159
173
|
try:
|
|
160
174
|
issue_data = github_ops.get_issue(repo.github, issue_number)
|
|
161
175
|
except RuntimeError:
|
|
162
|
-
return
|
|
176
|
+
return None
|
|
163
177
|
|
|
164
178
|
milestone_number = (issue_data.get("milestone") or {}).get("number")
|
|
165
179
|
issue_labels = [lbl.get("name", "") for lbl in (issue_data.get("labels") or [])]
|
|
@@ -169,6 +183,7 @@ def enforce_oracle_readiness(
|
|
|
169
183
|
)
|
|
170
184
|
if readiness.reason is not None:
|
|
171
185
|
raise DispatchRefused(readiness.reason)
|
|
186
|
+
return readiness
|
|
172
187
|
|
|
173
188
|
|
|
174
189
|
def enforce_epic_dispatch_guard(
|
|
@@ -784,7 +799,11 @@ def dispatch(
|
|
|
784
799
|
# a driver kind this install doesn't implement. Placed early / before
|
|
785
800
|
# the TOS gate below so a refusal never depends on provider resolution
|
|
786
801
|
# succeeding first.
|
|
787
|
-
|
|
802
|
+
#
|
|
803
|
+
# #2166: the returned verdict is reused below to build the worker-
|
|
804
|
+
# briefing oracle-loop contract block — the SAME read this gate just
|
|
805
|
+
# used, not a second independent one — so the two can never disagree.
|
|
806
|
+
oracle_readiness = enforce_oracle_readiness(
|
|
788
807
|
proposal_type=proposal.type, repo=repo, config=config,
|
|
789
808
|
issue_number=proposal.issue_number,
|
|
790
809
|
)
|
|
@@ -994,44 +1013,64 @@ def dispatch(
|
|
|
994
1013
|
# a milestone-level flag, so "driver configured for this repo" is the
|
|
995
1014
|
# signal, mirroring the tests/acceptance/ auto-seal above) AND this issue
|
|
996
1015
|
# already has an authored slice, OR (#3212) is exempted from one —
|
|
997
|
-
#
|
|
998
|
-
# applies (e.g. before Gate A/#931 has run for it at all).
|
|
999
|
-
# waives the automated gate, not the design contract the
|
|
1000
|
-
# mocks define, so the worker still needs the pointer — see
|
|
1001
|
-
#
|
|
1016
|
+
# oracle_loop_contract_block_for_slice covers both and returns "" only
|
|
1017
|
+
# when neither applies (e.g. before Gate A/#931 has run for it at all).
|
|
1018
|
+
# An exemption waives the automated gate, not the design contract the
|
|
1019
|
+
# milestone's mocks define, so the worker still needs the pointer — see
|
|
1020
|
+
# oracle_loop_contract_block_for_slice's docstring for the exempted-issue
|
|
1021
|
+
# variant.
|
|
1022
|
+
#
|
|
1023
|
+
# #2166: this used to re-derive "does a slice exist" by scanning the
|
|
1024
|
+
# dispatching HOST's local base checkout (`repo_root / search_root`) —
|
|
1025
|
+
# a second, independent read from the #1138 gate above, which reads the
|
|
1026
|
+
# default branch over `gh`. A stale base checkout (nothing refreshes it
|
|
1027
|
+
# automatically — see docs/ORACLE_LOOP.md) made the two disagree: the
|
|
1028
|
+
# gate let a dispatch through because the slice existed on the default
|
|
1029
|
+
# branch, while this scan came back `""` because the local clone hadn't
|
|
1030
|
+
# pulled it yet, silently sending the worker with no oracle contract at
|
|
1031
|
+
# all. Now this builds the block from `oracle_readiness` — the EXACT
|
|
1032
|
+
# verdict the gate above already computed — so there is only one read
|
|
1033
|
+
# and the two can never diverge again.
|
|
1002
1034
|
briefing_text = proposal.briefing
|
|
1003
1035
|
if proposal.type == "work" and proposal.issue_number:
|
|
1004
|
-
from pathlib import Path # noqa: PLC0415
|
|
1005
|
-
|
|
1006
1036
|
from coord.state import issue_context_block # noqa: PLC0415
|
|
1007
1037
|
|
|
1008
1038
|
oracle_contract = ""
|
|
1009
1039
|
if config.acceptance.has_driver(proposal.repo_name):
|
|
1010
|
-
from coord.acceptance import
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
# out of the repo root) — this dispatch call has no single path
|
|
1017
|
-
# in hand to pick a route ahead of time (proposal.issue_number
|
|
1018
|
-
# alone doesn't say which), so it tries every search root this
|
|
1019
|
-
# repo declares and uses whichever one actually has the slice.
|
|
1020
|
-
# A local checkout scan (no `gh`), so trying more than one root
|
|
1021
|
-
# costs nothing but a stat/read against a directory that
|
|
1022
|
-
# usually doesn't exist.
|
|
1023
|
-
repo_root = Path(repo_path).expanduser()
|
|
1024
|
-
for search_root in config.acceptance.acceptance_search_roots(
|
|
1025
|
-
proposal.repo_name
|
|
1026
|
-
):
|
|
1027
|
-
oracle_contract = oracle_loop_contract_block(
|
|
1028
|
-
repo_root / search_root,
|
|
1040
|
+
from coord.acceptance import ( # noqa: PLC0415
|
|
1041
|
+
oracle_loop_contract_block_for_slice,
|
|
1042
|
+
)
|
|
1043
|
+
|
|
1044
|
+
if oracle_readiness is not None and oracle_readiness.applies:
|
|
1045
|
+
oracle_contract = oracle_loop_contract_block_for_slice(
|
|
1029
1046
|
proposal.repo_name,
|
|
1030
1047
|
proposal.issue_number,
|
|
1031
|
-
|
|
1048
|
+
has_slice=oracle_readiness.has_slice,
|
|
1049
|
+
exempt=oracle_readiness.exempt,
|
|
1050
|
+
ms_dir=oracle_readiness.ms_dir,
|
|
1051
|
+
acceptance_dirname=oracle_readiness.acceptance_dirname,
|
|
1032
1052
|
)
|
|
1033
|
-
|
|
1034
|
-
|
|
1053
|
+
# #2166 acceptance criterion: a gate must be able to fail,
|
|
1054
|
+
# and unconfirmed success is a defect — if the gate's own
|
|
1055
|
+
# verdict says there's a slice (or an exemption) to point
|
|
1056
|
+
# at, rendering the block must not silently come back
|
|
1057
|
+
# empty. That combination can only mean a bug in the
|
|
1058
|
+
# renderer above, not "no slice yet" (which `applies`/
|
|
1059
|
+
# `has_slice`/`exempt` already ruled out) — refuse loudly
|
|
1060
|
+
# rather than dispatch a worker with a hollow briefing.
|
|
1061
|
+
if (
|
|
1062
|
+
oracle_readiness.has_slice or oracle_readiness.exempt
|
|
1063
|
+
) and not oracle_contract:
|
|
1064
|
+
raise DispatchRefused(
|
|
1065
|
+
f"#2166: internal inconsistency building the "
|
|
1066
|
+
f"oracle-loop briefing for {proposal.repo_name}#"
|
|
1067
|
+
f"{proposal.issue_number} — the gate found a "
|
|
1068
|
+
"slice/exemption (ms_dir="
|
|
1069
|
+
f"{oracle_readiness.ms_dir!r}) but rendering the "
|
|
1070
|
+
"contract block came back empty. Refusing rather "
|
|
1071
|
+
"than dispatching a worker with no oracle "
|
|
1072
|
+
"contract."
|
|
1073
|
+
)
|
|
1035
1074
|
|
|
1036
1075
|
# #1720: dispatch-time file-overlap fence — the union of file
|
|
1037
1076
|
# footprints of every OTHER currently-running work-like assignment
|
|
@@ -433,6 +433,7 @@ def _fetch_manifest_data(
|
|
|
433
433
|
*,
|
|
434
434
|
issue_number: int | None = None,
|
|
435
435
|
roots: Iterable[str] | None = None,
|
|
436
|
+
root_out: "list[str] | None" = None,
|
|
436
437
|
):
|
|
437
438
|
"""*milestone_number*'s manifest data via *fetch* (a raw-content GitHub
|
|
438
439
|
fetch, no local checkout, no directory listing) — the legacy single-file
|
|
@@ -468,6 +469,16 @@ def _fetch_manifest_data(
|
|
|
468
469
|
unchanged from before #2896. Tries each root until one actually has a
|
|
469
470
|
legacy manifest and/or fragment file; a milestone's data lives under
|
|
470
471
|
exactly one, so the first root that produces anything wins.
|
|
472
|
+
|
|
473
|
+
*root_out* (#2166), when given, has the matched root dir appended —
|
|
474
|
+
the SAME root this data actually came from — so a caller rendering the
|
|
475
|
+
worker-briefing contract block (which needs to name a repo-relative
|
|
476
|
+
dirname in the text, e.g. ``tests/acceptance/ms-37/contract.md``) can
|
|
477
|
+
do so without a second, independent search. Appends the first
|
|
478
|
+
candidate root (or the legacy single-root default) when nothing
|
|
479
|
+
matched, mirroring the fall-through return below — there is no "right"
|
|
480
|
+
root to name for a slice that doesn't exist, so the caller must check
|
|
481
|
+
``has_slice``/``exempt`` before trusting this for message text.
|
|
471
482
|
"""
|
|
472
483
|
from coord import github_ops # noqa: PLC0415
|
|
473
484
|
from coord.acceptance import ( # noqa: PLC0415
|
|
@@ -511,6 +522,8 @@ def _fetch_manifest_data(
|
|
|
511
522
|
legacy, legacy_found = _fetch_one(f"{root_dir}/{ms_dir}", "manifest")
|
|
512
523
|
if issue_number is None:
|
|
513
524
|
if legacy_found:
|
|
525
|
+
if root_out is not None:
|
|
526
|
+
root_out.append(root_dir)
|
|
514
527
|
return legacy
|
|
515
528
|
continue
|
|
516
529
|
fragment, fragment_found = _fetch_one(
|
|
@@ -518,10 +531,14 @@ def _fetch_manifest_data(
|
|
|
518
531
|
str(issue_number),
|
|
519
532
|
)
|
|
520
533
|
if legacy_found or fragment_found:
|
|
534
|
+
if root_out is not None:
|
|
535
|
+
root_out.append(root_dir)
|
|
521
536
|
return merge_manifest_data(legacy, fragment)
|
|
522
537
|
|
|
523
538
|
# No root produced anything — degrade to empty data, same as the old
|
|
524
539
|
# single-root "not found" behaviour.
|
|
540
|
+
if root_out is not None:
|
|
541
|
+
root_out.append(search_roots[0])
|
|
525
542
|
return legacy if issue_number is None else merge_manifest_data(legacy, fragment)
|
|
526
543
|
|
|
527
544
|
|
|
@@ -714,6 +731,19 @@ class OracleReadiness:
|
|
|
714
731
|
#: gate doesn't apply. ``"approved"``/``"exempt"`` are the only values
|
|
715
732
|
#: that let ``reason`` be ``None``.
|
|
716
733
|
gate_a_state: str = ""
|
|
734
|
+
#: (#2166) The milestone this readiness verdict was computed against,
|
|
735
|
+
#: and the ``ms-NN`` directory name / repo-relative acceptance-root
|
|
736
|
+
#: dirname the slice (or exemption) it found actually lives under —
|
|
737
|
+
#: set whenever ``applies`` is ``True``. Exists so a caller that needs
|
|
738
|
+
#: to RENDER the worker-briefing contract block
|
|
739
|
+
#: (:func:`coord.acceptance.oracle_loop_contract_block_for_slice`) can
|
|
740
|
+
#: do so from THIS SAME verdict instead of re-deriving "does a slice
|
|
741
|
+
#: exist" from a second, independent read (previously a scan of the
|
|
742
|
+
#: dispatching host's local checkout, #2166's split-brain) — one
|
|
743
|
+
#: fetch, one source of truth, per #2096 "one question, one answer".
|
|
744
|
+
milestone_number: int | None = None
|
|
745
|
+
ms_dir: str = ""
|
|
746
|
+
acceptance_dirname: str = ""
|
|
717
747
|
|
|
718
748
|
|
|
719
749
|
def _gate_a_exempt_trade_off_note(
|
|
@@ -857,14 +887,27 @@ def issue_oracle_ready(
|
|
|
857
887
|
from coord.acceptance import test_ids_for_issue # noqa: PLC0415
|
|
858
888
|
from coord.acceptance_drivers import SUPPORTED_KINDS # noqa: PLC0415
|
|
859
889
|
|
|
890
|
+
# #2166: capture WHICH search root this issue's manifest data actually
|
|
891
|
+
# came from, so the verdict below can carry enough to let a caller
|
|
892
|
+
# render the worker-briefing contract block from THIS read — the same
|
|
893
|
+
# `gh`-fetched-from-the-default-branch source the gate itself just
|
|
894
|
+
# used — instead of a second, independent local-checkout scan that can
|
|
895
|
+
# silently disagree with it (the #2166 split-brain).
|
|
896
|
+
matched_roots: list[str] = []
|
|
860
897
|
manifest = _fetch_manifest_data(
|
|
861
898
|
repo_cfg.github, milestone_number, repo_cfg.default_branch, fetch,
|
|
862
899
|
issue_number=issue_number,
|
|
863
900
|
roots=config.acceptance.acceptance_search_roots(repo_cfg.name),
|
|
901
|
+
root_out=matched_roots,
|
|
864
902
|
)
|
|
865
903
|
has_slice = bool(test_ids_for_issue(manifest.tests, issue_number))
|
|
866
904
|
exempt = issue_number in manifest.exempt or "oracle:exempt" in set(issue_labels)
|
|
867
905
|
|
|
906
|
+
from coord.acceptance import ACCEPTANCE_DIRNAME, ms_dirname # noqa: PLC0415
|
|
907
|
+
|
|
908
|
+
ms_dir = ms_dirname(milestone_number)
|
|
909
|
+
acceptance_dirname = matched_roots[0] if matched_roots else ACCEPTANCE_DIRNAME
|
|
910
|
+
|
|
868
911
|
entry = config.acceptance.drivers.get(repo_cfg.name)
|
|
869
912
|
unsupported = _unsupported_driver_kinds(entry) if entry is not None else ()
|
|
870
913
|
|
|
@@ -887,13 +930,16 @@ def issue_oracle_ready(
|
|
|
887
930
|
return OracleReadiness(
|
|
888
931
|
applies=True, exempt=exempt, has_slice=has_slice,
|
|
889
932
|
unsupported_kinds=unsupported, reason=signoff.reason,
|
|
890
|
-
gate_a_state=signoff.state,
|
|
933
|
+
gate_a_state=signoff.state, milestone_number=milestone_number,
|
|
934
|
+
ms_dir=ms_dir, acceptance_dirname=acceptance_dirname,
|
|
891
935
|
)
|
|
892
936
|
|
|
893
937
|
if exempt:
|
|
894
938
|
return OracleReadiness(
|
|
895
939
|
applies=True, exempt=True, has_slice=has_slice,
|
|
896
940
|
unsupported_kinds=unsupported, gate_a_state=signoff.state,
|
|
941
|
+
milestone_number=milestone_number, ms_dir=ms_dir,
|
|
942
|
+
acceptance_dirname=acceptance_dirname,
|
|
897
943
|
)
|
|
898
944
|
|
|
899
945
|
reason: str | None = None
|
|
@@ -920,7 +966,8 @@ def issue_oracle_ready(
|
|
|
920
966
|
return OracleReadiness(
|
|
921
967
|
applies=True, exempt=False, has_slice=has_slice,
|
|
922
968
|
unsupported_kinds=unsupported, reason=reason,
|
|
923
|
-
gate_a_state=signoff.state,
|
|
969
|
+
gate_a_state=signoff.state, milestone_number=milestone_number,
|
|
970
|
+
ms_dir=ms_dir, acceptance_dirname=acceptance_dirname,
|
|
924
971
|
)
|
|
925
972
|
|
|
926
973
|
|
|
@@ -72,12 +72,14 @@ from coord.smoke import (
|
|
|
72
72
|
smoke_leg_capabilities,
|
|
73
73
|
)
|
|
74
74
|
from coord.state import (
|
|
75
|
+
claim_review_post,
|
|
75
76
|
load_dispatched,
|
|
76
77
|
load_done_reviews_needing_post,
|
|
77
78
|
load_liveness_audit_state,
|
|
78
79
|
load_notified,
|
|
79
80
|
mark_notified,
|
|
80
81
|
mark_review_posted,
|
|
82
|
+
release_review_post_claim,
|
|
81
83
|
save_liveness_audit_state,
|
|
82
84
|
save_plan,
|
|
83
85
|
)
|
|
@@ -3585,6 +3587,25 @@ def _try_parse_and_post_review(
|
|
|
3585
3587
|
transition.assignment_id, findings.verdict, findings.body
|
|
3586
3588
|
)
|
|
3587
3589
|
|
|
3590
|
+
# #2468: claim the right to POST this review's findings before actually
|
|
3591
|
+
# posting them. `post_orphaned_review_findings` (the orphan sweep) reads
|
|
3592
|
+
# the identical "done review, review_posted_at IS NULL" candidate set
|
|
3593
|
+
# this function is reacting to, and used to race it: both callers could
|
|
3594
|
+
# see NULL and both post the byte-identical comment (the #2288 round-4
|
|
3595
|
+
# incident this closes). Losing the claim means another caller is
|
|
3596
|
+
# posting — or has already posted — these exact findings, so this call
|
|
3597
|
+
# must NOT fall through to the "could not post" fallback comment below;
|
|
3598
|
+
# return True (handled) rather than False (which the caller would read
|
|
3599
|
+
# as a parse failure and post yet another, differently-worded, comment).
|
|
3600
|
+
if not claim_review_post(transition.assignment_id):
|
|
3601
|
+
log.info(
|
|
3602
|
+
"#2468: lost the review-post claim for %s — another caller is "
|
|
3603
|
+
"posting (or already posted) these findings; skipping to avoid "
|
|
3604
|
+
"a duplicate GitHub comment",
|
|
3605
|
+
transition.assignment_id,
|
|
3606
|
+
)
|
|
3607
|
+
return True
|
|
3608
|
+
|
|
3588
3609
|
review_target = record.get("review_target")
|
|
3589
3610
|
repo_github = record["repo_github"]
|
|
3590
3611
|
|
|
@@ -3648,6 +3669,11 @@ def _try_parse_and_post_review(
|
|
|
3648
3669
|
log.warning(
|
|
3649
3670
|
"Failed to post review comment for %s: %s", transition.assignment_id, exc
|
|
3650
3671
|
)
|
|
3672
|
+
# #2468: both post attempts (gh pr review, then this issue-comment
|
|
3673
|
+
# fallback) failed — release the claim so a later retry (another
|
|
3674
|
+
# `coord notify` pass, or `post_orphaned_review_findings`) isn't
|
|
3675
|
+
# permanently blocked from posting these findings at all.
|
|
3676
|
+
release_review_post_claim(transition.assignment_id)
|
|
3651
3677
|
return False
|
|
3652
3678
|
|
|
3653
3679
|
|
|
@@ -4546,6 +4572,24 @@ def post_orphaned_review_findings(
|
|
|
4546
4572
|
# per-stage display can skip the HTTP fetch on later runs.
|
|
4547
4573
|
_persist_review_findings(aid, findings.verdict, findings.body)
|
|
4548
4574
|
|
|
4575
|
+
# #2468: claim the right to POST before actually posting —
|
|
4576
|
+
# `_try_parse_and_post_review` (the live completion path, run
|
|
4577
|
+
# from `detect_transitions` earlier in the same drain, or from a
|
|
4578
|
+
# concurrent `coord notify` process) reads the identical
|
|
4579
|
+
# "review_posted_at IS NULL" candidate set this sweep queried via
|
|
4580
|
+
# `load_done_reviews_needing_post`. Losing the claim means that
|
|
4581
|
+
# other caller is posting — or has already posted — these exact
|
|
4582
|
+
# findings; skip entirely rather than writing a second,
|
|
4583
|
+
# byte-identical GitHub comment (the #2288 round-4 incident).
|
|
4584
|
+
if not claim_review_post(aid):
|
|
4585
|
+
log.info(
|
|
4586
|
+
"post_orphaned: lost the review-post claim for %s — "
|
|
4587
|
+
"another caller is posting (or already posted) these "
|
|
4588
|
+
"findings; skipping",
|
|
4589
|
+
aid,
|
|
4590
|
+
)
|
|
4591
|
+
continue
|
|
4592
|
+
|
|
4549
4593
|
review_target = row.get("review_target")
|
|
4550
4594
|
repo_github = row.get("repo_github") or ""
|
|
4551
4595
|
issue_number = row.get("issue_number", 0)
|
|
@@ -4617,6 +4661,12 @@ def post_orphaned_review_findings(
|
|
|
4617
4661
|
mark_notified(aid, EVENT_COMPLETION)
|
|
4618
4662
|
posted_ids.append(aid)
|
|
4619
4663
|
log.info("post_orphaned: posted findings for review %s", aid)
|
|
4664
|
+
else:
|
|
4665
|
+
# #2468: both post attempts failed — release the claim so a
|
|
4666
|
+
# later retry (the next drain's orphan sweep, or the live
|
|
4667
|
+
# path) isn't permanently blocked from posting these
|
|
4668
|
+
# findings at all.
|
|
4669
|
+
release_review_post_claim(aid)
|
|
4620
4670
|
|
|
4621
4671
|
return posted_ids
|
|
4622
4672
|
|
|
@@ -4175,6 +4175,67 @@ def openapi_spec() -> dict:
|
|
|
4175
4175
|
},
|
|
4176
4176
|
}
|
|
4177
4177
|
},
|
|
4178
|
+
"/review-post-claim": {
|
|
4179
|
+
"post": {
|
|
4180
|
+
"summary": (
|
|
4181
|
+
"Atomically claim the right to POST a review's findings "
|
|
4182
|
+
"to GitHub (#2468) — a conditional insert so the live "
|
|
4183
|
+
"completion path and the orphan sweep can never both "
|
|
4184
|
+
"post the identical comment"
|
|
4185
|
+
),
|
|
4186
|
+
"requestBody": {
|
|
4187
|
+
"required": True,
|
|
4188
|
+
"content": {
|
|
4189
|
+
"application/json": {
|
|
4190
|
+
"schema": {
|
|
4191
|
+
"type": "object",
|
|
4192
|
+
"properties": {
|
|
4193
|
+
"assignment_id": {"type": "string"},
|
|
4194
|
+
},
|
|
4195
|
+
"required": ["assignment_id"],
|
|
4196
|
+
}
|
|
4197
|
+
}
|
|
4198
|
+
},
|
|
4199
|
+
},
|
|
4200
|
+
"responses": {
|
|
4201
|
+
"200": {
|
|
4202
|
+
"description": "OK — `claimed` is true iff this call won",
|
|
4203
|
+
"content": {"application/json": {"schema": ok_response}},
|
|
4204
|
+
},
|
|
4205
|
+
"400": {"description": "Missing assignment_id"},
|
|
4206
|
+
},
|
|
4207
|
+
}
|
|
4208
|
+
},
|
|
4209
|
+
"/review-post-claim-release": {
|
|
4210
|
+
"post": {
|
|
4211
|
+
"summary": (
|
|
4212
|
+
"Release a claim taken via /review-post-claim (#2468), "
|
|
4213
|
+
"ONLY when the post attempt itself failed, so a "
|
|
4214
|
+
"legitimate retry isn't permanently stranded"
|
|
4215
|
+
),
|
|
4216
|
+
"requestBody": {
|
|
4217
|
+
"required": True,
|
|
4218
|
+
"content": {
|
|
4219
|
+
"application/json": {
|
|
4220
|
+
"schema": {
|
|
4221
|
+
"type": "object",
|
|
4222
|
+
"properties": {
|
|
4223
|
+
"assignment_id": {"type": "string"},
|
|
4224
|
+
},
|
|
4225
|
+
"required": ["assignment_id"],
|
|
4226
|
+
}
|
|
4227
|
+
}
|
|
4228
|
+
},
|
|
4229
|
+
},
|
|
4230
|
+
"responses": {
|
|
4231
|
+
"200": {
|
|
4232
|
+
"description": "OK — idempotent, absent claim is a no-op",
|
|
4233
|
+
"content": {"application/json": {"schema": ok_response}},
|
|
4234
|
+
},
|
|
4235
|
+
"400": {"description": "Missing assignment_id"},
|
|
4236
|
+
},
|
|
4237
|
+
}
|
|
4238
|
+
},
|
|
4178
4239
|
"/smoke-claim": {
|
|
4179
4240
|
"post": {
|
|
4180
4241
|
"summary": (
|
|
@@ -8408,6 +8469,44 @@ def build_app(
|
|
|
8408
8469
|
)
|
|
8409
8470
|
return JSONResponse({"ok": True})
|
|
8410
8471
|
|
|
8472
|
+
async def post_review_post_claim(request: Request) -> Response:
|
|
8473
|
+
# #2468: atomic review-POSTING claim on the daemon's canonical DB —
|
|
8474
|
+
# see coord.state.claim_review_post's docstring for the duplicate-
|
|
8475
|
+
# comment race this closes.
|
|
8476
|
+
from coord import state # noqa: PLC0415
|
|
8477
|
+
|
|
8478
|
+
body = await _read_json(request)
|
|
8479
|
+
if body is None:
|
|
8480
|
+
return JSONResponse({"error": "invalid JSON body"}, status_code=400)
|
|
8481
|
+
try:
|
|
8482
|
+
claimed = state._claim_review_post_local(body["assignment_id"])
|
|
8483
|
+
except KeyError as e:
|
|
8484
|
+
return JSONResponse({"error": f"missing field: {e}"}, status_code=400)
|
|
8485
|
+
except Exception as e: # noqa: BLE001
|
|
8486
|
+
return JSONResponse(
|
|
8487
|
+
{"error": "review-post-claim write failed", "detail": str(e)},
|
|
8488
|
+
status_code=503,
|
|
8489
|
+
)
|
|
8490
|
+
return JSONResponse({"ok": True, "claimed": claimed})
|
|
8491
|
+
|
|
8492
|
+
async def post_review_post_claim_release(request: Request) -> Response:
|
|
8493
|
+
# #2468: release a claim taken via post_review_post_claim above.
|
|
8494
|
+
from coord import state # noqa: PLC0415
|
|
8495
|
+
|
|
8496
|
+
body = await _read_json(request)
|
|
8497
|
+
if body is None:
|
|
8498
|
+
return JSONResponse({"error": "invalid JSON body"}, status_code=400)
|
|
8499
|
+
try:
|
|
8500
|
+
state._release_review_post_claim_local(body["assignment_id"])
|
|
8501
|
+
except KeyError as e:
|
|
8502
|
+
return JSONResponse({"error": f"missing field: {e}"}, status_code=400)
|
|
8503
|
+
except Exception as e: # noqa: BLE001
|
|
8504
|
+
return JSONResponse(
|
|
8505
|
+
{"error": "review-post-claim-release write failed", "detail": str(e)},
|
|
8506
|
+
status_code=503,
|
|
8507
|
+
)
|
|
8508
|
+
return JSONResponse({"ok": True})
|
|
8509
|
+
|
|
8411
8510
|
async def post_smoke_claim(request: Request) -> Response:
|
|
8412
8511
|
# #3333: atomic smoke fan-out dispatch claim on the daemon's
|
|
8413
8512
|
# canonical DB — see coord.state.claim_smoke_dispatch's docstring
|
|
@@ -12003,6 +12102,11 @@ def build_app(
|
|
|
12003
12102
|
Route("/review-findings", post_review_findings, methods=["POST"]),
|
|
12004
12103
|
Route("/review-claim", post_review_claim, methods=["POST"]),
|
|
12005
12104
|
Route("/review-claim-release", post_review_claim_release, methods=["POST"]),
|
|
12105
|
+
Route("/review-post-claim", post_review_post_claim, methods=["POST"]),
|
|
12106
|
+
Route(
|
|
12107
|
+
"/review-post-claim-release", post_review_post_claim_release,
|
|
12108
|
+
methods=["POST"],
|
|
12109
|
+
),
|
|
12006
12110
|
Route("/smoke-claim", post_smoke_claim, methods=["POST"]),
|
|
12007
12111
|
Route("/smoke-claim-release", post_smoke_claim_release, methods=["POST"]),
|
|
12008
12112
|
Route("/smoke-fanout-merge", post_smoke_fanout_merge, methods=["POST"]),
|