code-coordinator 0.5.580__tar.gz → 0.5.582__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.580 → code_coordinator-0.5.582}/PKG-INFO +1 -1
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/comments.py +167 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/github_ops.py +22 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/merge_queue.py +232 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/rest_schema.py +5 -2
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/review.py +29 -2
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/serve_app.py +25 -5
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/state.py +84 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_comments.py +101 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_github_ops.py +33 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_merge_queue.py +81 -33
- code_coordinator-0.5.582/tests/test_merge_verification.py +279 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_review.py +39 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_serve.py +42 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_serve_rest_routes.py +36 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_state.py +98 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/.gitignore +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/CLAUDE.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/GOAL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/LICENSE +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/MANIFEST.in +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/README.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/__init__.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/agent.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/audit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/backup.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/block_log.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/board_service.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/brain.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/claim.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/cli.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/client.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/codegen.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/config.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dao.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/db.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/deps.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dirlink.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/drive.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/events.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/filelock.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/freshness.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/gates.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/goal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/context.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/models.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/render.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/health/units.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/hooks.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/interactive.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/models.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/network.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/notify.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/openapi.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/parentage.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/plans.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/progress.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/release_window.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/reports.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/self_health.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/smoke.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/split_work.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/sql.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/test_author.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/test_report.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/usage.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/install-agent.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/pyproject.toml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/setup.cfg +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/__init__.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/backends.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/conftest.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_client.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_config.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_db.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dirlink.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_events.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_init.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_models.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_network.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_session.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_split.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.580 → code_coordinator-0.5.582}/tests/write_parity.py +0 -0
|
@@ -724,6 +724,7 @@ tests/test_machine_onboard.py
|
|
|
724
724
|
tests/test_machine_pause.py
|
|
725
725
|
tests/test_machine_stats.py
|
|
726
726
|
tests/test_merge_queue.py
|
|
727
|
+
tests/test_merge_verification.py
|
|
727
728
|
tests/test_merge_verify.py
|
|
728
729
|
tests/test_milestone_chat.py
|
|
729
730
|
tests/test_milestone_dispatch.py
|
|
@@ -84,6 +84,20 @@ EVENT_PHANTOM_HEALED = "phantom_row_healed"
|
|
|
84
84
|
# the two are complementary, not overlapping. Like EVENT_PHANTOM_HEALED,
|
|
85
85
|
# this narrates an action ALREADY TAKEN, not only a finding.
|
|
86
86
|
EVENT_STUCK_TEST_STATE_HEALED = "stuck_test_state_healed"
|
|
87
|
+
# #2109: the merge-time verification note — coordinator-assembled facts
|
|
88
|
+
# (merge SHA, tests touched, Test/Review verdicts + machines, a harness-
|
|
89
|
+
# limits caveat, a manual spot-check pointer) posted on the issue the
|
|
90
|
+
# instant a `type="work"`-like entry merges. Distinct from every event
|
|
91
|
+
# above: those all narrate a PIPELINE condition (stuck, stalled, healed);
|
|
92
|
+
# this one exists so the richest account of a fix — today reachable only
|
|
93
|
+
# via `git show` on the worker's own commit message (see #2109's own
|
|
94
|
+
# issue body) — lands somewhere a human actually looks. Never worker-
|
|
95
|
+
# authored prose: every field is derived from board state or the diff
|
|
96
|
+
# (`coord.merge_queue._build_verification_comment`). Kept to exactly one
|
|
97
|
+
# comment per issue — a second merge on the same issue (fix-1/retry
|
|
98
|
+
# landing a second branch) UPDATES this comment in place
|
|
99
|
+
# (`coord.state.upsert_issue_comment`) rather than appending a duplicate.
|
|
100
|
+
EVENT_VERIFICATION = "verification"
|
|
87
101
|
|
|
88
102
|
|
|
89
103
|
@dataclass
|
|
@@ -965,3 +979,156 @@ def format_plan(
|
|
|
965
979
|
lines.append(estimate.strip())
|
|
966
980
|
|
|
967
981
|
return "\n".join(lines)
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
# ── Verification note (#2109) ────────────────────────────────────────────────
|
|
985
|
+
|
|
986
|
+
_REPRO_HEADING_RE = re.compile(
|
|
987
|
+
r"^#{1,6}\s*(?:Repro(?:duce|duction)?(?:\s+steps)?|Steps\s+to\s+reproduce)\b"
|
|
988
|
+
r".*?\n(?P<body>.*?)(?=\n#{1,6}\s|\Z)",
|
|
989
|
+
re.IGNORECASE | re.DOTALL | re.MULTILINE,
|
|
990
|
+
)
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
def extract_repro_section(issue_body: str | None) -> str | None:
|
|
994
|
+
"""Pull the repro/reproduction section out of an issue body, or
|
|
995
|
+
``None`` when absent/blank.
|
|
996
|
+
|
|
997
|
+
Recognises ``## Repro``, ``## Reproduction``, ``## Repro steps``,
|
|
998
|
+
``## Reproduce``, and ``## Steps to reproduce`` headings (#2109 review
|
|
999
|
+
nit — real issue bodies vary more than the original fixtures assumed).
|
|
1000
|
+
|
|
1001
|
+
Used by the #2109 verification note's manual spot-check section — the
|
|
1002
|
+
one piece of the note that is quoted, not derived, and quoted from the
|
|
1003
|
+
issue's OWN pre-fix text (never worker prose) so a human has concrete
|
|
1004
|
+
steps to re-check against, not a restatement of the fix.
|
|
1005
|
+
"""
|
|
1006
|
+
if not issue_body:
|
|
1007
|
+
return None
|
|
1008
|
+
m = _REPRO_HEADING_RE.search(issue_body)
|
|
1009
|
+
if not m:
|
|
1010
|
+
return None
|
|
1011
|
+
body = m.group("body").strip()
|
|
1012
|
+
return body or None
|
|
1013
|
+
|
|
1014
|
+
|
|
1015
|
+
_HARNESS_LIMIT_CAVEATS: dict[str, str] = {
|
|
1016
|
+
"gtk": (
|
|
1017
|
+
"This diff matched this repo's `gtk` capability rule. `GtkDriver` "
|
|
1018
|
+
"synthesises `UiEvent`s directly, so a passing GTK Test/Review leg "
|
|
1019
|
+
"does **not** exercise real GDK signal delivery, `EventController` "
|
|
1020
|
+
"wiring, IME/dead keys, or painted geometry at real DPI."
|
|
1021
|
+
),
|
|
1022
|
+
"tui": (
|
|
1023
|
+
"This diff matched this repo's `tui` capability rule. `TestBackend` "
|
|
1024
|
+
"does not parse real ANSI/SGR sequences, so a passing TUI Test/"
|
|
1025
|
+
"Review leg does **not** confirm raw-mode input, real terminal "
|
|
1026
|
+
"rendering, or mouse-event delivery."
|
|
1027
|
+
),
|
|
1028
|
+
"browser": (
|
|
1029
|
+
"This diff matched this repo's `browser` capability rule. A "
|
|
1030
|
+
"headless-browser Test leg exercises the DOM but not every real "
|
|
1031
|
+
"input path (native OS file pickers, drag-and-drop from outside "
|
|
1032
|
+
"the browser, platform IME) — treat it as a strong but incomplete "
|
|
1033
|
+
"proxy for a human driving the real UI."
|
|
1034
|
+
),
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
DEFAULT_HARNESS_LIMIT_CAVEAT = (
|
|
1038
|
+
"No repo-specific harness-limits caveat is on file for the capability "
|
|
1039
|
+
"(if any) this diff's `smoke_tests.capability_rules` matched — a green "
|
|
1040
|
+
"Test/Review gate does not by itself prove every layer the change "
|
|
1041
|
+
"touches was actually exercised."
|
|
1042
|
+
)
|
|
1043
|
+
|
|
1044
|
+
|
|
1045
|
+
def harness_limits_caveat(matched_capabilities: Iterable[str]) -> str:
|
|
1046
|
+
"""The standing #2109 caveat for the first of *matched_capabilities*
|
|
1047
|
+
(in order) this module has a caveat on file for, or
|
|
1048
|
+
:data:`DEFAULT_HARNESS_LIMIT_CAVEAT` when none match.
|
|
1049
|
+
|
|
1050
|
+
*matched_capabilities* is expected to come straight out of
|
|
1051
|
+
``coord.smoke.match_rules`` — the SAME `smoke_tests.capability_rules`
|
|
1052
|
+
matcher Test-stage routing already uses, never a second,
|
|
1053
|
+
independently-maintained file-pattern list (#2096, one question one
|
|
1054
|
+
answer).
|
|
1055
|
+
"""
|
|
1056
|
+
for cap in matched_capabilities:
|
|
1057
|
+
caveat = _HARNESS_LIMIT_CAVEATS.get(cap)
|
|
1058
|
+
if caveat:
|
|
1059
|
+
return caveat
|
|
1060
|
+
return DEFAULT_HARNESS_LIMIT_CAVEAT
|
|
1061
|
+
|
|
1062
|
+
|
|
1063
|
+
def format_verification(
|
|
1064
|
+
*,
|
|
1065
|
+
assignment_id: str,
|
|
1066
|
+
repo_name: str,
|
|
1067
|
+
issue_number: int,
|
|
1068
|
+
branch: str,
|
|
1069
|
+
merge_sha: str | None = None,
|
|
1070
|
+
pr_number: int | None = None,
|
|
1071
|
+
test_files: Iterable[str] = (),
|
|
1072
|
+
test_verdict: str | None = None,
|
|
1073
|
+
test_machine: str | None = None,
|
|
1074
|
+
review_verdict: str | None = None,
|
|
1075
|
+
review_machine: str | None = None,
|
|
1076
|
+
harness_caveat: str = DEFAULT_HARNESS_LIMIT_CAVEAT,
|
|
1077
|
+
repro: str | None = None,
|
|
1078
|
+
) -> str:
|
|
1079
|
+
"""Build the #2109 coordinator-assembled verification note.
|
|
1080
|
+
|
|
1081
|
+
Every field here is a fact the coordinator already holds — a merge SHA,
|
|
1082
|
+
a diff-derived file list, a recorded gate verdict + the machine that
|
|
1083
|
+
produced it, a repo-config-derived caveat, a quote from the issue's own
|
|
1084
|
+
pre-fix ``## Repro`` section — never worker-authored prose. Posted (or
|
|
1085
|
+
updated in place, see ``coord.state.upsert_issue_comment``) by
|
|
1086
|
+
``coord.merge_queue._maybe_post_verification`` the instant a merge
|
|
1087
|
+
lands.
|
|
1088
|
+
"""
|
|
1089
|
+
marker = _marker(
|
|
1090
|
+
EVENT_VERIFICATION,
|
|
1091
|
+
assignment=assignment_id,
|
|
1092
|
+
repo=repo_name,
|
|
1093
|
+
issue=issue_number,
|
|
1094
|
+
)
|
|
1095
|
+
branch_line = f"**Branch:** `{branch}`"
|
|
1096
|
+
if pr_number is not None:
|
|
1097
|
+
branch_line += f" (PR #{pr_number})"
|
|
1098
|
+
test_files = list(test_files)
|
|
1099
|
+
lines = [
|
|
1100
|
+
"## 🔍 Coordinator: Verification note",
|
|
1101
|
+
marker,
|
|
1102
|
+
branch_line,
|
|
1103
|
+
f"**Merge commit:** `{merge_sha}`" if merge_sha else "**Merge commit:** (not recorded)",
|
|
1104
|
+
"",
|
|
1105
|
+
"### Tests added/changed",
|
|
1106
|
+
_fmt_files(test_files) if test_files else "(none detected in the diff)",
|
|
1107
|
+
"",
|
|
1108
|
+
"### Gate verdicts",
|
|
1109
|
+
(
|
|
1110
|
+
f"- **Test:** {test_verdict or '(no verdict recorded)'}"
|
|
1111
|
+
+ (f" — ran on `{test_machine}`" if test_machine else "")
|
|
1112
|
+
),
|
|
1113
|
+
(
|
|
1114
|
+
f"- **Review:** {review_verdict or '(no verdict recorded)'}"
|
|
1115
|
+
+ (f" — ran on `{review_machine}`" if review_machine else "")
|
|
1116
|
+
),
|
|
1117
|
+
"",
|
|
1118
|
+
"### Harness-limits caveat",
|
|
1119
|
+
harness_caveat,
|
|
1120
|
+
"",
|
|
1121
|
+
"### Manual spot-check",
|
|
1122
|
+
(
|
|
1123
|
+
repro.strip()
|
|
1124
|
+
if repro and repro.strip()
|
|
1125
|
+
else (
|
|
1126
|
+
f"No `## Repro` section found on issue #{issue_number} — "
|
|
1127
|
+
"check the issue body directly."
|
|
1128
|
+
)
|
|
1129
|
+
),
|
|
1130
|
+
"",
|
|
1131
|
+
"_Assembled automatically by the coordinator from board state and "
|
|
1132
|
+
"the merged diff — not worker-authored._",
|
|
1133
|
+
]
|
|
1134
|
+
return "\n".join(lines)
|
|
@@ -1592,6 +1592,28 @@ def post_issue_comment(repo: str, issue_number: int, body: str):
|
|
|
1592
1592
|
_capture_comment_write(repo, issue_number, body, url)
|
|
1593
1593
|
|
|
1594
1594
|
|
|
1595
|
+
def update_issue_comment(repo: str, issue_number: int, comment_id: int, body: str) -> None:
|
|
1596
|
+
"""Overwrite an existing issue comment's body in place (#2109) — the
|
|
1597
|
+
update half of :func:`post_issue_comment`, so a standing marked comment
|
|
1598
|
+
(e.g. the merge-time verification note, ``coord.state.
|
|
1599
|
+
upsert_issue_comment``) can be refreshed on a second merge of the same
|
|
1600
|
+
issue instead of appended as a duplicate.
|
|
1601
|
+
|
|
1602
|
+
*comment_id* is the numeric REST id (``parse_comment_id`` on a comment's
|
|
1603
|
+
``url``), not the GraphQL node id ``get_issue_comments`` returns as
|
|
1604
|
+
``id``. *issue_number* isn't read by the PATCH itself (GitHub addresses
|
|
1605
|
+
a comment purely by its own id) — it's accepted anyway so the #873
|
|
1606
|
+
capture-at-write mirror below is keyed exactly like
|
|
1607
|
+
:func:`post_issue_comment`'s.
|
|
1608
|
+
"""
|
|
1609
|
+
_gh(
|
|
1610
|
+
"api", f"repos/{repo}/issues/comments/{comment_id}", "-X", "PATCH",
|
|
1611
|
+
"-f", f"body={body}", caller="github_ops.update_issue_comment",
|
|
1612
|
+
)
|
|
1613
|
+
fake_url = f"https://github.com/{repo}/issues/{issue_number}#issuecomment-{comment_id}"
|
|
1614
|
+
_capture_comment_write(repo, issue_number, body, fake_url)
|
|
1615
|
+
|
|
1616
|
+
|
|
1595
1617
|
def _capture_comment_write(repo: str, issue_number: int, body: str, url: str) -> None:
|
|
1596
1618
|
"""Best-effort mirror of a just-posted comment into the durable
|
|
1597
1619
|
``issue_comments`` table (#873).
|
|
@@ -63,6 +63,7 @@ from coord.state import (
|
|
|
63
63
|
comment_on_issue,
|
|
64
64
|
dismiss_drive_escalation,
|
|
65
65
|
record_uat_verdict,
|
|
66
|
+
upsert_issue_comment,
|
|
66
67
|
)
|
|
67
68
|
from coord.uat_checks import UatCheckResult, evaluate_uat_checks
|
|
68
69
|
|
|
@@ -7343,6 +7344,228 @@ def _maybe_push_status(
|
|
|
7343
7344
|
return None
|
|
7344
7345
|
|
|
7345
7346
|
|
|
7347
|
+
# ── Verification note (#2109) ───────────────────────────────────────────────
|
|
7348
|
+
#
|
|
7349
|
+
# Today the richest, only POST-fix account of a merged change lives solely in
|
|
7350
|
+
# the worker's own commit message — reachable only via `git show`, not from
|
|
7351
|
+
# the issue, the PR, or the TUI (see #2109's own issue body for the vimcode
|
|
7352
|
+
# evidence). This posts a `<!-- coord:event=verification -->` comment on the
|
|
7353
|
+
# issue the instant a merge lands, assembled entirely from facts the
|
|
7354
|
+
# coordinator already holds (board state, the diff) — never worker-authored
|
|
7355
|
+
# prose, which would just reintroduce self-reporting.
|
|
7356
|
+
|
|
7357
|
+
|
|
7358
|
+
def _latest_review_assignment_for_entry(
|
|
7359
|
+
entry: "QueuedMerge", board,
|
|
7360
|
+
) -> Assignment | None:
|
|
7361
|
+
"""The most-recently-dispatched verdict-bearing review :class:`Assignment`
|
|
7362
|
+
covering *entry*'s work chain — the same walk :func:`_latest_review_verdict`
|
|
7363
|
+
does, returning the Assignment itself (not just its verdict string) so a
|
|
7364
|
+
caller can also read its ``machine_name``.
|
|
7365
|
+
"""
|
|
7366
|
+
if board is None:
|
|
7367
|
+
return None
|
|
7368
|
+
pool = list(getattr(board, "completed", []) or []) + list(getattr(board, "active", []) or [])
|
|
7369
|
+
branch_work_ids = _chain_work_ids(entry, pool)
|
|
7370
|
+
if not branch_work_ids:
|
|
7371
|
+
return None
|
|
7372
|
+
reviews = [
|
|
7373
|
+
a for a in pool
|
|
7374
|
+
if getattr(a, "type", None) == "review"
|
|
7375
|
+
and getattr(a, "review_of_assignment_id", None) in branch_work_ids
|
|
7376
|
+
and getattr(a, "review_verdict", None) is not None
|
|
7377
|
+
]
|
|
7378
|
+
if not reviews:
|
|
7379
|
+
return None
|
|
7380
|
+
return max(reviews, key=lambda a: getattr(a, "dispatched_at", None) or 0.0)
|
|
7381
|
+
|
|
7382
|
+
|
|
7383
|
+
def _latest_smoke_assignment_for_entry(
|
|
7384
|
+
entry: "QueuedMerge", board,
|
|
7385
|
+
) -> Assignment | None:
|
|
7386
|
+
"""The most-recently-dispatched Test-stage (``type="smoke"``) child
|
|
7387
|
+
:class:`Assignment` for the work assignment behind *entry*.
|
|
7388
|
+
|
|
7389
|
+
``Assignment.test_state`` (the verdict) lives on the WORK row; the
|
|
7390
|
+
machine that actually produced it lives on this child row — mirrors
|
|
7391
|
+
:func:`_latest_review_assignment_for_entry`'s split for the same reason.
|
|
7392
|
+
"""
|
|
7393
|
+
if board is None:
|
|
7394
|
+
return None
|
|
7395
|
+
work = _work_assignment_for_entry(entry, board)
|
|
7396
|
+
if work is None:
|
|
7397
|
+
return None
|
|
7398
|
+
pool = list(getattr(board, "completed", []) or []) + list(getattr(board, "active", []) or [])
|
|
7399
|
+
smokes = [
|
|
7400
|
+
a for a in pool
|
|
7401
|
+
if getattr(a, "type", None) == "smoke"
|
|
7402
|
+
and getattr(a, "review_of_assignment_id", None) == getattr(work, "assignment_id", None)
|
|
7403
|
+
]
|
|
7404
|
+
if not smokes:
|
|
7405
|
+
return None
|
|
7406
|
+
return max(smokes, key=lambda a: getattr(a, "dispatched_at", None) or 0.0)
|
|
7407
|
+
|
|
7408
|
+
|
|
7409
|
+
def _changed_test_files(
|
|
7410
|
+
entry: "QueuedMerge", gh_ops: "GhOps", *, touched: list[str] | None = None,
|
|
7411
|
+
) -> list[str]:
|
|
7412
|
+
"""Test files touched by the branch that just merged, derived straight
|
|
7413
|
+
from the diff (``gh_ops.get_compare_files``) — never from worker prose.
|
|
7414
|
+
|
|
7415
|
+
Heuristic file-PATH match only (no AST / ``#[test]`` parse): any
|
|
7416
|
+
touched path under a ``test(s)/`` directory, or matching the common
|
|
7417
|
+
``test_*`` / ``*_test.*`` / ``*.test.*`` / ``*_spec.*`` / ``*.spec.*``
|
|
7418
|
+
naming conventions. Best-effort — a lookup failure (or a stub ``GhOps``
|
|
7419
|
+
that doesn't support ``get_compare_files`` returning falsy) yields an
|
|
7420
|
+
empty list, never raises.
|
|
7421
|
+
|
|
7422
|
+
*touched*, when supplied, is an already-fetched ``get_compare_files``
|
|
7423
|
+
result for this exact ``(target_branch, branch)`` pair — passed in by
|
|
7424
|
+
``_build_verification_comment`` so the two callers don't make the same
|
|
7425
|
+
``gh api compare`` round trip twice per merge (#2109 review, #2096: one
|
|
7426
|
+
question, one answer). ``None`` (the default) fetches it here, unchanged
|
|
7427
|
+
from this function's original standalone behaviour.
|
|
7428
|
+
"""
|
|
7429
|
+
if touched is None:
|
|
7430
|
+
try:
|
|
7431
|
+
touched = gh_ops.get_compare_files(
|
|
7432
|
+
entry.repo_github, entry.target_branch, entry.branch,
|
|
7433
|
+
)
|
|
7434
|
+
except Exception: # noqa: BLE001 — best-effort, see docstring
|
|
7435
|
+
touched = None
|
|
7436
|
+
if not touched:
|
|
7437
|
+
return []
|
|
7438
|
+
out = []
|
|
7439
|
+
for path in touched:
|
|
7440
|
+
lower = f"/{path.lower()}"
|
|
7441
|
+
base = lower.rsplit("/", 1)[-1]
|
|
7442
|
+
if (
|
|
7443
|
+
"/test/" in lower or "/tests/" in lower
|
|
7444
|
+
or base.startswith("test_") or "_test." in base
|
|
7445
|
+
or ".test." in base or "_spec." in base or ".spec." in base
|
|
7446
|
+
):
|
|
7447
|
+
out.append(path)
|
|
7448
|
+
return out
|
|
7449
|
+
|
|
7450
|
+
|
|
7451
|
+
def _matched_smoke_capabilities(touched_files: list[str], config) -> list[str]:
|
|
7452
|
+
"""Which ``smoke_tests.capability_rules`` capabilities *touched_files*
|
|
7453
|
+
matches — via :func:`coord.smoke.match_rules`, the SAME matcher
|
|
7454
|
+
Test-stage routing itself uses, so the #2109 harness-limits caveat below
|
|
7455
|
+
can never silently disagree with what actually got routed (#2096, one
|
|
7456
|
+
question one answer). Returns ``[]`` when *config* is ``None`` or
|
|
7457
|
+
declares no capability rules.
|
|
7458
|
+
"""
|
|
7459
|
+
from coord.smoke import match_rules # noqa: PLC0415
|
|
7460
|
+
|
|
7461
|
+
smoke_cfg = getattr(config, "smoke_tests", None) if config is not None else None
|
|
7462
|
+
rules = getattr(smoke_cfg, "capability_rules", None) or []
|
|
7463
|
+
return match_rules(touched_files, rules)
|
|
7464
|
+
|
|
7465
|
+
|
|
7466
|
+
def _build_verification_comment(
|
|
7467
|
+
entry: "QueuedMerge", board, gh_ops: "GhOps", config,
|
|
7468
|
+
) -> str:
|
|
7469
|
+
"""Assemble the #2109 merge-time verification note for *entry* — every
|
|
7470
|
+
field a fact already on the board or in the diff, never worker prose.
|
|
7471
|
+
"""
|
|
7472
|
+
from coord.comments import extract_repro_section, format_verification, harness_limits_caveat # noqa: PLC0415
|
|
7473
|
+
|
|
7474
|
+
try:
|
|
7475
|
+
touched = gh_ops.get_compare_files(
|
|
7476
|
+
entry.repo_github, entry.target_branch, entry.branch,
|
|
7477
|
+
) or []
|
|
7478
|
+
except Exception: # noqa: BLE001 — best-effort
|
|
7479
|
+
touched = []
|
|
7480
|
+
|
|
7481
|
+
# #2109 review: `entry.target_branch_head_sha` is captured BEFORE the
|
|
7482
|
+
# merge (at the gating/staleness check, so `has_smoke_verdict` can tell
|
|
7483
|
+
# whether the target moved since the test verdict was recorded) — it is
|
|
7484
|
+
# by construction the PARENT commit, never the commit this merge just
|
|
7485
|
+
# produced. Reusing it here would silently mislabel the verification
|
|
7486
|
+
# note's headline "Merge commit" field with a stale pre-merge SHA (and,
|
|
7487
|
+
# in a batch sharing one target branch, the same stale SHA across every
|
|
7488
|
+
# entry in the group). This function is only ever called from
|
|
7489
|
+
# `_maybe_post_verification`, strictly after `gh_ops.merge_pr(...)` has
|
|
7490
|
+
# already succeeded, so a fresh fetch here is a genuinely different
|
|
7491
|
+
# question from the pre-merge one above — not a redundant repeat of it —
|
|
7492
|
+
# and is the only way to report the SHA the merge actually produced.
|
|
7493
|
+
try:
|
|
7494
|
+
merge_sha = gh_ops.get_branch_sha(entry.repo_github, entry.target_branch)
|
|
7495
|
+
except Exception: # noqa: BLE001 — best-effort
|
|
7496
|
+
merge_sha = None
|
|
7497
|
+
|
|
7498
|
+
test_files = _changed_test_files(entry, gh_ops, touched=touched)
|
|
7499
|
+
|
|
7500
|
+
work = _work_assignment_for_entry(entry, board)
|
|
7501
|
+
test_verdict = getattr(work, "test_state", None) if work is not None else None
|
|
7502
|
+
smoke = _latest_smoke_assignment_for_entry(entry, board)
|
|
7503
|
+
test_machine = getattr(smoke, "machine_name", None) if smoke is not None else None
|
|
7504
|
+
|
|
7505
|
+
review = _latest_review_assignment_for_entry(entry, board)
|
|
7506
|
+
review_verdict = getattr(review, "review_verdict", None) if review is not None else None
|
|
7507
|
+
review_machine = getattr(review, "machine_name", None) if review is not None else None
|
|
7508
|
+
|
|
7509
|
+
caveat = harness_limits_caveat(_matched_smoke_capabilities(touched, config))
|
|
7510
|
+
|
|
7511
|
+
get_issue = getattr(gh_ops, "get_issue", None)
|
|
7512
|
+
repro: str | None = None
|
|
7513
|
+
if get_issue is not None:
|
|
7514
|
+
try:
|
|
7515
|
+
issue_data = get_issue(entry.repo_github, entry.issue_number) or {}
|
|
7516
|
+
repro = extract_repro_section(issue_data.get("body"))
|
|
7517
|
+
except Exception: # noqa: BLE001 — best-effort
|
|
7518
|
+
repro = None
|
|
7519
|
+
|
|
7520
|
+
return format_verification(
|
|
7521
|
+
assignment_id=entry.assignment_id,
|
|
7522
|
+
repo_name=entry.repo_name,
|
|
7523
|
+
issue_number=entry.issue_number,
|
|
7524
|
+
branch=entry.branch,
|
|
7525
|
+
merge_sha=merge_sha,
|
|
7526
|
+
pr_number=entry.pr_number,
|
|
7527
|
+
test_files=test_files,
|
|
7528
|
+
test_verdict=test_verdict,
|
|
7529
|
+
test_machine=test_machine,
|
|
7530
|
+
review_verdict=review_verdict,
|
|
7531
|
+
review_machine=review_machine,
|
|
7532
|
+
harness_caveat=caveat,
|
|
7533
|
+
repro=repro,
|
|
7534
|
+
)
|
|
7535
|
+
|
|
7536
|
+
|
|
7537
|
+
def _maybe_post_verification(
|
|
7538
|
+
entry: "QueuedMerge", board, gh_ops: "GhOps", config,
|
|
7539
|
+
) -> "MergeEvent | None":
|
|
7540
|
+
"""Post (or update in place) the #2109 verification note on *entry*'s
|
|
7541
|
+
issue, right after a successful merge.
|
|
7542
|
+
|
|
7543
|
+
Scoped to ``CLOSES_ISSUE_TYPES`` entries — the same scope the close/
|
|
7544
|
+
comment decision just above already uses, since a ``mock-author``/
|
|
7545
|
+
``test-author`` row has no single "did this fix the bug" question for a
|
|
7546
|
+
verification note to answer. Best-effort, same posture as every other
|
|
7547
|
+
post-merge hook in this block (:func:`_maybe_clear_expected_red`,
|
|
7548
|
+
:func:`_maybe_push_design_round`, :func:`_maybe_push_status`): a failure
|
|
7549
|
+
here is reported as an event and never undoes the merge that already
|
|
7550
|
+
happened.
|
|
7551
|
+
"""
|
|
7552
|
+
if entry.assignment_type not in CLOSES_ISSUE_TYPES:
|
|
7553
|
+
return None
|
|
7554
|
+
try:
|
|
7555
|
+
body = _build_verification_comment(entry, board, gh_ops, config)
|
|
7556
|
+
except Exception as e: # noqa: BLE001 — best-effort, see docstring
|
|
7557
|
+
return MergeEvent(entry, "verification_note_failed", str(e))
|
|
7558
|
+
try:
|
|
7559
|
+
upsert_issue_comment(
|
|
7560
|
+
entry.repo_name, entry.issue_number, body, repo_github=entry.repo_github,
|
|
7561
|
+
)
|
|
7562
|
+
except Exception as e: # noqa: BLE001 — best-effort, see docstring
|
|
7563
|
+
return MergeEvent(entry, "verification_note_failed", str(e))
|
|
7564
|
+
return MergeEvent(
|
|
7565
|
+
entry, "verification_note_posted", f"posted/updated on issue #{entry.issue_number}",
|
|
7566
|
+
)
|
|
7567
|
+
|
|
7568
|
+
|
|
7346
7569
|
def process(
|
|
7347
7570
|
items: list[QueuedMerge],
|
|
7348
7571
|
gh_ops: GhOps,
|
|
@@ -8960,6 +9183,15 @@ def process(
|
|
|
8960
9183
|
status_event = MergeEvent(entry, "status_push_failed", str(e))
|
|
8961
9184
|
if status_event is not None:
|
|
8962
9185
|
events.append(status_event)
|
|
9186
|
+
# #2109: the verification note — same best-effort posture as
|
|
9187
|
+
# every hook above, posted last so it can read the freshest
|
|
9188
|
+
# board/diff state this merge produced.
|
|
9189
|
+
try:
|
|
9190
|
+
verification_event = _maybe_post_verification(entry, board, gh_ops, config)
|
|
9191
|
+
except Exception as e: # noqa: BLE001 — bookkeeping, never undoes a real merge
|
|
9192
|
+
verification_event = MergeEvent(entry, "verification_note_failed", str(e))
|
|
9193
|
+
if verification_event is not None:
|
|
9194
|
+
events.append(verification_event)
|
|
8963
9195
|
continue
|
|
8964
9196
|
entry.state = CONFLICT
|
|
8965
9197
|
entry.error = msg
|
|
@@ -126,11 +126,14 @@ class IssueCommentCreate:
|
|
|
126
126
|
durable ``issue_comments`` mirror (``/issue-comments`` ``capture``).
|
|
127
127
|
* ``"sync"`` — backfill the mirror from the tracker
|
|
128
128
|
(``/issue-comments`` ``sync``); ``body`` is not read.
|
|
129
|
+
* ``"upsert"`` (#2109) — post *body*, or edit an existing comment on the
|
|
130
|
+
same issue carrying the identical ``coord:event=...`` marker in place,
|
|
131
|
+
instead of appending a duplicate (``coord.state.upsert_issue_comment``).
|
|
129
132
|
"""
|
|
130
133
|
|
|
131
|
-
#: The comment text. Required for ``post`` and ``
|
|
134
|
+
#: The comment text. Required for ``post``, ``capture``, and ``upsert``.
|
|
132
135
|
body: str | None = None
|
|
133
|
-
#: ``"post"`` | ``"capture"`` | ``"sync"``. Defaults to ``"post"``.
|
|
136
|
+
#: ``"post"`` | ``"capture"`` | ``"sync"`` | ``"upsert"``. Defaults to ``"post"``.
|
|
134
137
|
action: str | None = None
|
|
135
138
|
#: ``capture`` only: the tracker's own comment id, when known.
|
|
136
139
|
gh_comment_id: int | None = None
|
|
@@ -3712,8 +3712,29 @@ def dispatch_review(
|
|
|
3712
3712
|
# never match the merge-time `branch_patch_id`, which is computed from an
|
|
3713
3713
|
# uncapped compare-API diff). The display copy shown to the reviewer is
|
|
3714
3714
|
# then truncated locally from the same fetch — no second `gh` call.
|
|
3715
|
+
#
|
|
3716
|
+
# #2364: `pr` can legitimately be `None` here — the drive-queue path
|
|
3717
|
+
# opens PRs lazily, so "review ran before the PR existed" is a normal
|
|
3718
|
+
# timing, not an edge case. Previously that made `full_diff_text`
|
|
3719
|
+
# (and therefore `review_patch_id` below) permanently `None` for such
|
|
3720
|
+
# a review, which in turn made every later `review-reaffirm` against
|
|
3721
|
+
# it fail forever with "missing patch-id data" even though the stored
|
|
3722
|
+
# verdict was a real `approve`. Fall back to a direct branch-vs-base
|
|
3723
|
+
# compare diff — the exact same API `github_ops.get_branch_patch_id`
|
|
3724
|
+
# uses at merge time to fingerprint `branch_patch_id` — so the two
|
|
3725
|
+
# sides of the "did the content change" question are always computed
|
|
3726
|
+
# the same way, whether or not a PR happens to exist yet.
|
|
3715
3727
|
_diff = diff_fetcher or github_ops.pr_diff
|
|
3716
|
-
|
|
3728
|
+
if pr:
|
|
3729
|
+
full_diff_text = _diff(repo.github, pr["number"], max_chars=None)
|
|
3730
|
+
else:
|
|
3731
|
+
_compare_diff_pre_pr = compare_diff_fetcher or github_ops.get_compare_diff
|
|
3732
|
+
try:
|
|
3733
|
+
full_diff_text = _compare_diff_pre_pr(
|
|
3734
|
+
repo.github, base_branch, completed.branch
|
|
3735
|
+
)
|
|
3736
|
+
except Exception: # noqa: BLE001 — fail-safe: missing diff is not blocking
|
|
3737
|
+
full_diff_text = None
|
|
3717
3738
|
|
|
3718
3739
|
# #3196: cross-check `pr_diff`'s file list against a fresh, explicit
|
|
3719
3740
|
# compare of the branch's own current refs before trusting it. A
|
|
@@ -3730,7 +3751,13 @@ def dispatch_review(
|
|
|
3730
3751
|
# untrustworthy (not just that one file — a diff computed against
|
|
3731
3752
|
# the wrong base is wrong throughout), so it's replaced outright by
|
|
3732
3753
|
# the compare's own diff rather than patched.
|
|
3733
|
-
|
|
3754
|
+
#
|
|
3755
|
+
# #2364: skip entirely when `pr` is `None` — `full_diff_text` above
|
|
3756
|
+
# already came straight from `get_compare_diff`/*compare_diff_fetcher*,
|
|
3757
|
+
# the exact source this cross-check would otherwise fetch again to
|
|
3758
|
+
# corroborate it against. Re-running it would just spend two more
|
|
3759
|
+
# `gh` calls to confirm a diff agrees with itself.
|
|
3760
|
+
if full_diff_text and pr:
|
|
3734
3761
|
_compare_files = compare_files_fetcher or github_ops.get_compare_files
|
|
3735
3762
|
try:
|
|
3736
3763
|
known_files = _compare_files(repo.github, base_branch, completed.branch)
|
|
@@ -2927,7 +2927,7 @@ RPC_SUPERSEDED_BY_RESOURCE: dict[str, str] = {
|
|
|
2927
2927
|
"/issue-comment": 'POST /issue/{repo_name}/{number}/comments ("action": "post")',
|
|
2928
2928
|
"/issue-comments": (
|
|
2929
2929
|
"GET /issue/{repo_name}/{number}/comments, or POST the same path with "
|
|
2930
|
-
'"action": "capture" / "sync"'
|
|
2930
|
+
'"action": "capture" / "sync" / "upsert"'
|
|
2931
2931
|
),
|
|
2932
2932
|
"/assignment-usage": "PATCH /assignment/{assignment_id}",
|
|
2933
2933
|
"/assignment-session-id": "PATCH /assignment/{assignment_id} (claude_session_id)",
|
|
@@ -3195,7 +3195,8 @@ def openapi_spec() -> dict:
|
|
|
3195
3195
|
"summary": (
|
|
3196
3196
|
"#1944: create or mirror one comment — the resource-shaped "
|
|
3197
3197
|
"stand-in for POST /issue-comment (action=post, the default) "
|
|
3198
|
-
"and POST /issue-comments (action=capture / action=sync
|
|
3198
|
+
"and POST /issue-comments (action=capture / action=sync / "
|
|
3199
|
+
"action=upsert, #2109)."
|
|
3199
3200
|
),
|
|
3200
3201
|
"parameters": issue_path_params,
|
|
3201
3202
|
"requestBody": {
|
|
@@ -9940,6 +9941,9 @@ def build_app(
|
|
|
9940
9941
|
async def post_issue_comments(request: Request) -> Response:
|
|
9941
9942
|
# #873: capture-at-write / backfill-sync into the durable
|
|
9942
9943
|
# issue_comments mirror on the canonical DB.
|
|
9944
|
+
# #2109: also the ``"upsert"`` write for the merge-time verification
|
|
9945
|
+
# note — edits a standing marked comment in place rather than
|
|
9946
|
+
# posting a duplicate.
|
|
9943
9947
|
from coord import state # noqa: PLC0415
|
|
9944
9948
|
|
|
9945
9949
|
body = await _read_json(request)
|
|
@@ -9964,6 +9968,14 @@ def build_app(
|
|
|
9964
9968
|
repo_github=body.get("repo_github"),
|
|
9965
9969
|
)
|
|
9966
9970
|
return JSONResponse({"synced": n})
|
|
9971
|
+
if action == "upsert":
|
|
9972
|
+
state._upsert_issue_comment_local(
|
|
9973
|
+
body["repo_name"],
|
|
9974
|
+
body["issue_number"],
|
|
9975
|
+
body["body"],
|
|
9976
|
+
repo_github=body.get("repo_github"),
|
|
9977
|
+
)
|
|
9978
|
+
return JSONResponse({"ok": True})
|
|
9967
9979
|
except KeyError as e:
|
|
9968
9980
|
return JSONResponse({"error": f"missing field: {e}"}, status_code=400)
|
|
9969
9981
|
except Exception as e: # noqa: BLE001
|
|
@@ -10167,7 +10179,8 @@ def build_app(
|
|
|
10167
10179
|
async def post_issue_comments_resource(request: Request) -> Response:
|
|
10168
10180
|
"""#1944: ``POST /issue/{repo}/{n}/comments`` — the resource-shaped
|
|
10169
10181
|
stand-in for /issue-comment (``action="post"``, the default) and
|
|
10170
|
-
/issue-comments (``action="capture"`` / ``"sync"``
|
|
10182
|
+
/issue-comments (``action="capture"`` / ``"sync"`` / ``"upsert"``,
|
|
10183
|
+
#2109)."""
|
|
10171
10184
|
from coord import state # noqa: PLC0415
|
|
10172
10185
|
|
|
10173
10186
|
key = _resource_issue_key(request)
|
|
@@ -10184,11 +10197,11 @@ def build_app(
|
|
|
10184
10197
|
{"error": f"unknown field(s): {', '.join(unknown)}"}, status_code=400
|
|
10185
10198
|
)
|
|
10186
10199
|
action = body.get("action") or "post"
|
|
10187
|
-
if action not in ("post", "capture", "sync"):
|
|
10200
|
+
if action not in ("post", "capture", "sync", "upsert"):
|
|
10188
10201
|
return JSONResponse(
|
|
10189
10202
|
{"error": f"unknown action: {action!r}"}, status_code=400
|
|
10190
10203
|
)
|
|
10191
|
-
if action in ("post", "capture") and not body.get("body"):
|
|
10204
|
+
if action in ("post", "capture", "upsert") and not body.get("body"):
|
|
10192
10205
|
return JSONResponse(
|
|
10193
10206
|
{"error": f"body is required for action {action!r}"}, status_code=400
|
|
10194
10207
|
)
|
|
@@ -10210,6 +10223,13 @@ def build_app(
|
|
|
10210
10223
|
author=body.get("author"),
|
|
10211
10224
|
created_at=body.get("created_at"),
|
|
10212
10225
|
)
|
|
10226
|
+
elif action == "upsert":
|
|
10227
|
+
state._upsert_issue_comment_local(
|
|
10228
|
+
repo_name,
|
|
10229
|
+
number,
|
|
10230
|
+
body["body"],
|
|
10231
|
+
repo_github=body.get("repo_github"),
|
|
10232
|
+
)
|
|
10213
10233
|
else:
|
|
10214
10234
|
synced = state._sync_issue_comments_local(
|
|
10215
10235
|
repo_name, number, repo_github=body.get("repo_github")
|