code-coordinator 0.5.558__tar.gz → 0.5.560__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.558 → code_coordinator-0.5.560}/PKG-INFO +1 -1
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/agent.py +14 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/conflict_fix.py +282 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/drive.py +38 -12
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/drive_queue.py +33 -3
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/merge_queue.py +79 -1
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notify.py +38 -1
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/reconcile.py +112 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent.py +14 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_conflict_fix.py +155 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive.py +46 -4
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_queue.py +58 -1
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_merge_queue.py +78 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reconcile.py +110 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/.gitignore +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/CLAUDE.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/GOAL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/LICENSE +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/MANIFEST.in +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/README.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/__init__.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/audit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/backup.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/block_log.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/board_service.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/brain.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/claim.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/cli.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/client.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/codegen.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/comments.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/config.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dao.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/db.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/deps.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/events.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/filelock.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/freshness.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/gates.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/goal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/context.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/models.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/render.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/health/units.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/hooks.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/interactive.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/models.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/network.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/openapi.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/parentage.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/plans.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/progress.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/release_window.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/reports.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/review.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/self_health.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/smoke.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/split_work.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/sql.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/state.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/test_author.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/test_report.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/usage.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/install-agent.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/pyproject.toml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/setup.cfg +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/__init__.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/backends.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/conftest.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_client.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_config.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_db.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_events.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_init.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_models.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_network.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_review.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_session.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_split.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_state.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.558 → code_coordinator-0.5.560}/tests/write_parity.py +0 -0
|
@@ -3828,6 +3828,20 @@ gate (not posted to GitHub by you — never run `gh` commands): a `partial`/ \
|
|
|
3828
3828
|
comment on the issue quoting what remains, instead of auto-closing work \
|
|
3829
3829
|
that still has a reported bug live.
|
|
3830
3830
|
|
|
3831
|
+
#3522: if you are going to declare `partial` or `investigation`, your \
|
|
3832
|
+
commit messages must reference this issue with `Refs #N` — never `Fix \
|
|
3833
|
+
#N`/`Fixes #N`/`Closes #N`/`Resolves #N`, even when that is this repo's \
|
|
3834
|
+
own commit convention for a fully-resolving change. GitHub scans commit \
|
|
3835
|
+
messages for closing keywords independently of the PR body and auto-closes \
|
|
3836
|
+
the issue the moment the commit lands on the base branch, regardless of \
|
|
3837
|
+
what your `ISSUE_RESOLUTION:` line says — the coordinator's merge gate can \
|
|
3838
|
+
rewrite the PR body but cannot rewrite history in a `gh`-only wire layer, \
|
|
3839
|
+
so it refuses to merge a `partial`/`investigation` PR whose commits still \
|
|
3840
|
+
carry a closing keyword. If you already wrote a commit this way before \
|
|
3841
|
+
deciding on `partial`/`investigation`, reword it (`git commit --amend` for \
|
|
3842
|
+
the most recent commit, `git rebase -i` for an earlier one) to say `Refs \
|
|
3843
|
+
#N` before you push.
|
|
3844
|
+
|
|
3831
3845
|
#252: before exiting, emit a SMOKE_TESTS block telling the human what to \
|
|
3832
3846
|
manually verify. You changed the code; you know what's worth poking.
|
|
3833
3847
|
|
|
@@ -53,6 +53,20 @@ distinct :data:`ALREADY_UPSTREAM_MARKER` for the superseded case, so
|
|
|
53
53
|
:func:`coord.reconcile.on_conflict_fix_done` can park the entry with
|
|
54
54
|
accurate "nothing to merge" text instead of escalating a conflict that
|
|
55
55
|
does not exist.
|
|
56
|
+
|
|
57
|
+
#3522: a fourth no-conflict-expected shape, dispatched directly by
|
|
58
|
+
``coord.merge_queue.process()`` the moment its own
|
|
59
|
+
``issue_resolution_closing_keyword_in_commit`` gate fires (#3502) — a
|
|
60
|
+
commit message on the branch carries a GitHub closing keyword for this
|
|
61
|
+
entry's own issue even though the PR is marked ``ISSUE_RESOLUTION:
|
|
62
|
+
partial``/``investigation``. ``dispatch_conflict_fix(..., reword_commit=
|
|
63
|
+
True)`` sends a worker authorized ONLY to reword that commit's wording
|
|
64
|
+
(never its content), verified content-preserving the same way the
|
|
65
|
+
stale-rebase worker verifies its own premise — see
|
|
66
|
+
:func:`build_reword_commit_briefing`. Before this, nothing ever remedied
|
|
67
|
+
that refusal: the merge gate correctly kept refusing forever, and the
|
|
68
|
+
drive-queue's own resume sweep kept burning its budget relaunching into
|
|
69
|
+
the identical, unfixable-by-relaunch block (claude-coordinator#3519).
|
|
56
70
|
"""
|
|
57
71
|
|
|
58
72
|
from __future__ import annotations
|
|
@@ -734,6 +748,240 @@ def already_upstream_verdict_in_text(text: str | None) -> bool:
|
|
|
734
748
|
return ALREADY_UPSTREAM_MARKER in _decode_worker_text(text)
|
|
735
749
|
|
|
736
750
|
|
|
751
|
+
# ── #3522: reword-commit (issue_resolution_closing_keyword_in_commit) ──────
|
|
752
|
+
#
|
|
753
|
+
# `coord.merge_queue.process()`'s `issue_resolution_closing_keyword_in_commit`
|
|
754
|
+
# gate refuses to merge a branch whose PR is marked `ISSUE_RESOLUTION:
|
|
755
|
+
# partial`/`investigation` but whose commit message(s) still carry a
|
|
756
|
+
# GitHub closing keyword (`Fix`/`Fixes`/`Closes`/`Resolves #N`) for that
|
|
757
|
+
# SAME issue — GitHub auto-closes the issue from the commit message on
|
|
758
|
+
# merge regardless of what the PR body or the coordinator's own
|
|
759
|
+
# `close_issue()` chokepoint say. Unlike the PR-body half of the same gate
|
|
760
|
+
# (#1196/#1318), there is no `gh`-only rewrite for a commit message already
|
|
761
|
+
# on the branch — only a local rebase that REWORDS it can fix this, and
|
|
762
|
+
# nothing ever dispatched that rebase, so every such PR deadlocked:
|
|
763
|
+
# `coord merge` refuses every attempt, the drive-queue's own resume sweep
|
|
764
|
+
# (`coord.drive_queue._reconcile_blocked`) saw the same unfixable refusal
|
|
765
|
+
# and burned its resume budget relaunching into it, and only an operator
|
|
766
|
+
# force-push ever cleared it (claude-coordinator#3519).
|
|
767
|
+
#
|
|
768
|
+
# This section gives that gate a remedy worker, dispatched by
|
|
769
|
+
# `coord.merge_queue.process()` itself the moment the gate fires (see that
|
|
770
|
+
# module): a message-only rewrite, narrower even than the stale-rebase
|
|
771
|
+
# briefing above — it is authorized to change ONLY the wording of a commit
|
|
772
|
+
# SUBJECT that references this entry's own issue with a closing keyword,
|
|
773
|
+
# never the tree. Verified the same way the stale-rebase worker verifies a
|
|
774
|
+
# "just stale" premise: a content-addressed `git patch-id --stable` (and
|
|
775
|
+
# the working tree itself) must be byte-identical before and after the
|
|
776
|
+
# reword — if it isn't, something touched content, not just the message,
|
|
777
|
+
# and the worker refuses rather than force-push a silently-changed diff out
|
|
778
|
+
# from under a review that already approved a different tree.
|
|
779
|
+
|
|
780
|
+
# Marker a reword-commit worker's STUCK: line starts with when the rewrite
|
|
781
|
+
# was not content-preserving — a patch-id or tree mismatch, or a rebase
|
|
782
|
+
# conflict encountered while rewording. Same convention as
|
|
783
|
+
# STALE_REBASE_MISMATCH_MARKER/SEALED_SCOPE_STUCK_MARKER: a fixed,
|
|
784
|
+
# machine-parseable string, not prose.
|
|
785
|
+
REWORD_MISMATCH_MARKER = "coord:conflict=reword-mismatch"
|
|
786
|
+
|
|
787
|
+
# Title prefix for a reword-commit conflict-fix dispatch — visible in the
|
|
788
|
+
# TUI Pipeline row so an operator can tell at a glance this used the
|
|
789
|
+
# narrow, message-only briefing rather than the ordinary conflict-fix one.
|
|
790
|
+
REWORD_COMMIT_FIX_TITLE_PREFIX = "[reword-commit-fix]"
|
|
791
|
+
|
|
792
|
+
REWORD_COMMIT_FIX_SYSTEM_PROMPT = """\
|
|
793
|
+
You are a Claude Code conflict-fix worker. This branch's PR is marked \
|
|
794
|
+
`ISSUE_RESOLUTION: partial` or `ISSUE_RESOLUTION: investigation` — it does \
|
|
795
|
+
NOT fully resolve its issue — but one of its own commit messages still \
|
|
796
|
+
uses a GitHub closing keyword (`Fix`/`Fixes`/`Closes`/`Resolves #N`) for \
|
|
797
|
+
that same issue. GitHub auto-closes the issue from the commit message on \
|
|
798
|
+
merge, independent of the PR body, so this blocks the merge until the \
|
|
799
|
+
wording is fixed. Your job is a MESSAGE-ONLY rewrite: change the wording, \
|
|
800
|
+
never the content.
|
|
801
|
+
|
|
802
|
+
Rules:
|
|
803
|
+
- The coordinator denies `gh` and `git push --force` for this worker. \
|
|
804
|
+
Don't try to use them — the harness will reject the call.
|
|
805
|
+
- Stay on the worker's branch — do NOT push to main / develop / target.
|
|
806
|
+
- Use git push --force-with-lease (NOT --force).
|
|
807
|
+
- Rewrite ONLY the commit subject/body wording that uses a closing keyword \
|
|
808
|
+
for this entry's own issue number — e.g. `Fix #N: ...` / `Fixes #N ...` / \
|
|
809
|
+
`Closes #N` / `Resolves #N` becomes `Refs #N: ...` (same text otherwise). \
|
|
810
|
+
Leave every other commit, and every other word of the ones you touch, \
|
|
811
|
+
untouched.
|
|
812
|
+
- Before rewriting, record the branch's content fingerprint: `git diff \
|
|
813
|
+
<target-branch>...HEAD | git patch-id --stable`, and its tree: `git \
|
|
814
|
+
diff <target-branch> HEAD` (expect no output — nothing ahead of the merge \
|
|
815
|
+
base besides this branch's own already-landed changes).
|
|
816
|
+
- Use `git rebase -i <target-branch>` with `reword` on the affected \
|
|
817
|
+
commit(s) (or, for a simple one-commit rewrite, `git commit --amend`), \
|
|
818
|
+
editing ONLY the wording described above.
|
|
819
|
+
- After rewriting, confirm BOTH fingerprints are UNCHANGED: the patch-id \
|
|
820
|
+
must match exactly, and `git diff <target-branch> HEAD` must produce the \
|
|
821
|
+
IDENTICAL output as before. A rewording that changes either means \
|
|
822
|
+
something touched content, not just the message — DO NOT push.
|
|
823
|
+
- If a conflict marker appears during the rebase, or either fingerprint \
|
|
824
|
+
differs after the reword, DO NOT push. Stop and end your turn with a \
|
|
825
|
+
STUCK: line that starts with the exact marker \
|
|
826
|
+
`coord:conflict=reword-mismatch`, e.g.
|
|
827
|
+
STUCK: coord:conflict=reword-mismatch — patch-id before <hash>, after \
|
|
828
|
+
<hash> differ
|
|
829
|
+
The coordinator reads that marker from your transcript, not your process \
|
|
830
|
+
exit code (which you cannot control), and escalates to a human rather than \
|
|
831
|
+
force-pushing a diff review never saw.
|
|
832
|
+
|
|
833
|
+
Progress reporting:
|
|
834
|
+
- After each significant step (fingerprint recorded, reword done, \
|
|
835
|
+
fingerprint verified, pushed), output:
|
|
836
|
+
STATUS: [what you just did] → [what you're about to do] → [confidence]
|
|
837
|
+
- If you stop, output the STUCK: line described above and wait for \
|
|
838
|
+
guidance.\
|
|
839
|
+
"""
|
|
840
|
+
|
|
841
|
+
|
|
842
|
+
def build_reword_commit_briefing(
|
|
843
|
+
*,
|
|
844
|
+
entry: QueuedMerge,
|
|
845
|
+
repo_path: str,
|
|
846
|
+
test_command: str | None,
|
|
847
|
+
) -> str:
|
|
848
|
+
"""Briefing for a conflict-fix dispatched against the #3522
|
|
849
|
+
`issue_resolution_closing_keyword_in_commit` merge-gate refusal — a
|
|
850
|
+
message-only rewrite of whichever commit(s) use a GitHub closing
|
|
851
|
+
keyword for *entry.issue_number*, verified content-preserving (patch-id
|
|
852
|
+
and tree both unchanged) the same way :func:`build_stale_rebase_briefing`
|
|
853
|
+
verifies its "just stale" premise.
|
|
854
|
+
|
|
855
|
+
*test_command* is accepted for signature symmetry with the other
|
|
856
|
+
``build_*_briefing`` functions, but a pure message rewrite changes no
|
|
857
|
+
code, so this briefing does not ask the worker to re-run it — unlike
|
|
858
|
+
:func:`build_conflict_fix_briefing`/:func:`build_stale_rebase_briefing`,
|
|
859
|
+
both of which DO change (or might change) tracked files.
|
|
860
|
+
"""
|
|
861
|
+
lines: list[str] = [
|
|
862
|
+
f"# Reword commit for ISSUE_RESOLUTION: ambiguous closing keyword — "
|
|
863
|
+
f"{entry.repo_github} branch `{entry.branch}`",
|
|
864
|
+
"",
|
|
865
|
+
f"`{entry.branch}`'s PR is marked `ISSUE_RESOLUTION: partial` or "
|
|
866
|
+
"`ISSUE_RESOLUTION: investigation` — it does NOT fully resolve "
|
|
867
|
+
f"#{entry.issue_number} — but a commit message on this branch still "
|
|
868
|
+
f"uses a GitHub closing keyword for #{entry.issue_number}.",
|
|
869
|
+
f"Reason: {entry.error or 'issue_resolution_closing_keyword_in_commit'}",
|
|
870
|
+
"",
|
|
871
|
+
f"Issue: #{entry.issue_number} — {entry.issue_title}",
|
|
872
|
+
"",
|
|
873
|
+
"## Where you are",
|
|
874
|
+
"",
|
|
875
|
+
f"You are already in a dedicated git worktree checked out on "
|
|
876
|
+
f"`{entry.branch}` — the coordinator created it for you. Work HERE.",
|
|
877
|
+
"",
|
|
878
|
+
f"Do **NOT** `cd {repo_path}` (that is the machine's shared base "
|
|
879
|
+
"checkout) and do NOT `git checkout` / `git switch` anywhere. Leaving "
|
|
880
|
+
f"the base checkout parked on `{entry.branch}` breaks every later "
|
|
881
|
+
"dispatch against that branch on this machine (#1694).",
|
|
882
|
+
"",
|
|
883
|
+
"## Steps",
|
|
884
|
+
"",
|
|
885
|
+
"1. `git fetch origin`",
|
|
886
|
+
f"2. Record the pre-rewrite fingerprint: `git diff "
|
|
887
|
+
f"origin/{entry.target_branch}...HEAD | git patch-id --stable` and "
|
|
888
|
+
f"confirm `git diff origin/{entry.target_branch} HEAD` is what you "
|
|
889
|
+
"expect it to be (whatever it is now, it must be IDENTICAL after "
|
|
890
|
+
"the reword).",
|
|
891
|
+
f"3. Find the commit(s) whose subject or body references "
|
|
892
|
+
f"`#{entry.issue_number}` with a closing keyword — `Fix`/`Fixes`/"
|
|
893
|
+
f"`Fixed`/`Close`/`Closes`/`Closed`/`Resolve`/`Resolves`/`Resolved` "
|
|
894
|
+
f"immediately followed by `#{entry.issue_number}` — and reword ONLY "
|
|
895
|
+
"that wording to `Refs`, via `git rebase -i "
|
|
896
|
+
f"origin/{entry.target_branch}` (`reword` on each such commit) or "
|
|
897
|
+
"`git commit --amend` if it is the tip commit. Change nothing else "
|
|
898
|
+
"in the message and nothing in the diff.",
|
|
899
|
+
f"4. Re-check the fingerprint from step 2: `git diff "
|
|
900
|
+
f"origin/{entry.target_branch}...HEAD | git patch-id --stable` must "
|
|
901
|
+
f"match EXACTLY, and `git diff origin/{entry.target_branch} HEAD` "
|
|
902
|
+
"must be byte-identical to step 2's. If either differs, see "
|
|
903
|
+
'"When NOT to guess" below.',
|
|
904
|
+
f"5. `git push --force-with-lease origin {entry.branch}`",
|
|
905
|
+
"6. Exit 0 if push succeeds; non-zero otherwise.",
|
|
906
|
+
"",
|
|
907
|
+
"## When NOT to guess",
|
|
908
|
+
"",
|
|
909
|
+
"This dispatch is authorized for a MESSAGE-ONLY rewrite — never a "
|
|
910
|
+
"content change. If a conflict marker appears during the rebase, "
|
|
911
|
+
"or either fingerprint from step 4 differs from step 2's, DO NOT "
|
|
912
|
+
"push: something touched content, not just wording, and this "
|
|
913
|
+
"worker's narrow authorization does not cover resolving that. Stop "
|
|
914
|
+
"and end your turn with a `STUCK:` line that begins with the exact "
|
|
915
|
+
f"marker `{REWORD_MISMATCH_MARKER}` and then names what happened, "
|
|
916
|
+
"e.g.",
|
|
917
|
+
"",
|
|
918
|
+
f" STUCK: {REWORD_MISMATCH_MARKER} — patch-id before <hash>, "
|
|
919
|
+
"after <hash> differ",
|
|
920
|
+
"",
|
|
921
|
+
"The coordinator reads that marker from your transcript, not your "
|
|
922
|
+
"process exit code (which you cannot control), and escalates to a "
|
|
923
|
+
f"human on issue #{entry.issue_number} rather than force-pushing a "
|
|
924
|
+
"diff the review that already approved this branch never saw.",
|
|
925
|
+
"",
|
|
926
|
+
"You will NOT use `gh` or `git push --force` — both are denied by "
|
|
927
|
+
"the harness. The coordinator owns PR retries and issue posting.",
|
|
928
|
+
]
|
|
929
|
+
return "\n".join(lines)
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
def reword_mismatch_verdict_in_text(text: str | None) -> bool:
|
|
933
|
+
"""True when a reword-commit conflict-fix worker's log carries the
|
|
934
|
+
:data:`REWORD_MISMATCH_MARKER` — i.e. it refused to push because the
|
|
935
|
+
rewrite was not content-preserving (a real conflict, or a patch-id/tree
|
|
936
|
+
mismatch). Mirrors :func:`stale_rebase_mismatch_verdict_in_text`.
|
|
937
|
+
"""
|
|
938
|
+
if not text:
|
|
939
|
+
return False
|
|
940
|
+
return REWORD_MISMATCH_MARKER in _decode_worker_text(text)
|
|
941
|
+
|
|
942
|
+
|
|
943
|
+
def detect_reword_mismatch(
|
|
944
|
+
*,
|
|
945
|
+
log_path: str | None = None,
|
|
946
|
+
host: str | None = None,
|
|
947
|
+
assignment_id: str | None = None,
|
|
948
|
+
port: int = AGENT_PORT,
|
|
949
|
+
timeout: float = 15.0,
|
|
950
|
+
) -> bool:
|
|
951
|
+
"""True when a finished reword-commit conflict-fix worker refused to
|
|
952
|
+
push because its rewrite was not content-preserving (caught in step 4
|
|
953
|
+
of :func:`build_reword_commit_briefing`).
|
|
954
|
+
|
|
955
|
+
Mirrors :func:`detect_stale_rebase_mismatch` exactly (same
|
|
956
|
+
local-log-then-agent-endpoint lookup, same best-effort ``False`` on any
|
|
957
|
+
read/transport failure) but reads for :data:`REWORD_MISMATCH_MARKER` via
|
|
958
|
+
:func:`reword_mismatch_verdict_in_text`.
|
|
959
|
+
"""
|
|
960
|
+
if log_path:
|
|
961
|
+
try:
|
|
962
|
+
from pathlib import Path # noqa: PLC0415
|
|
963
|
+
|
|
964
|
+
p = Path(log_path)
|
|
965
|
+
if p.exists():
|
|
966
|
+
raw = p.read_text(encoding="utf-8", errors="replace")
|
|
967
|
+
if reword_mismatch_verdict_in_text(raw):
|
|
968
|
+
return True
|
|
969
|
+
except OSError:
|
|
970
|
+
pass
|
|
971
|
+
|
|
972
|
+
if host and assignment_id:
|
|
973
|
+
try:
|
|
974
|
+
resp = httpx.get(
|
|
975
|
+
f"http://{host}:{port}/logs/{assignment_id}", timeout=timeout
|
|
976
|
+
)
|
|
977
|
+
resp.raise_for_status()
|
|
978
|
+
return reword_mismatch_verdict_in_text(resp.text)
|
|
979
|
+
except (httpx.HTTPError, httpx.TimeoutException):
|
|
980
|
+
return False
|
|
981
|
+
|
|
982
|
+
return False
|
|
983
|
+
|
|
984
|
+
|
|
737
985
|
def build_conflict_fix_briefing(
|
|
738
986
|
*,
|
|
739
987
|
entry: QueuedMerge,
|
|
@@ -1418,6 +1666,7 @@ def dispatch_conflict_fix(
|
|
|
1418
1666
|
stuck_summary: str | None = None,
|
|
1419
1667
|
stale_rebase: bool = False,
|
|
1420
1668
|
after_stale_rebase_mismatch: bool = False,
|
|
1669
|
+
reword_commit: bool = False,
|
|
1421
1670
|
status_fetcher: Callable[..., StatusResult] | None = None,
|
|
1422
1671
|
machine_pick_out: "list[ConflictFixMachinePick] | None" = None,
|
|
1423
1672
|
) -> Assignment | None:
|
|
@@ -1540,6 +1789,26 @@ def dispatch_conflict_fix(
|
|
|
1540
1789
|
unaffected: the stale-rebase worker itself still never resolves
|
|
1541
1790
|
anything — only this ordinary worker (or its own semantic-escalation
|
|
1542
1791
|
tier) may.
|
|
1792
|
+
|
|
1793
|
+
``reword_commit=True`` (#3522) dispatches the remedy for a merge-gate
|
|
1794
|
+
refusal recorded as ``issue_resolution_closing_keyword_in_commit``
|
|
1795
|
+
(``coord.merge_queue.process()``'s own gate, fired the moment it sees
|
|
1796
|
+
that refusal — no separate sweep call site needed) — a commit message
|
|
1797
|
+
on the branch carries a GitHub closing keyword for this entry's own
|
|
1798
|
+
issue even though the PR is marked ``ISSUE_RESOLUTION: partial``/
|
|
1799
|
+
``investigation``. Uses :func:`build_reword_commit_briefing` instead of
|
|
1800
|
+
the ordinary briefing: narrower even than the stale-rebase one, it is
|
|
1801
|
+
authorized ONLY to reword the offending commit message(s) — never to
|
|
1802
|
+
change content — and verifies that with the same patch-id/tree
|
|
1803
|
+
fingerprint technique :func:`build_stale_rebase_briefing` uses to prove
|
|
1804
|
+
its own "just stale" premise. A mismatch (real content change, or a
|
|
1805
|
+
rebase conflict) refuses — STUCK, retry cap consumed exactly like any
|
|
1806
|
+
other conflict-fix failure — rather than force-pushing a diff the
|
|
1807
|
+
review that already approved this branch never saw. Goes through the
|
|
1808
|
+
SAME retry-cap check as the ordinary (non-``semantic``) path above — a
|
|
1809
|
+
reword that recurs against the same error after a prior attempt
|
|
1810
|
+
escalates to a human exactly like a recurring mechanical conflict
|
|
1811
|
+
would.
|
|
1543
1812
|
"""
|
|
1544
1813
|
if semantic:
|
|
1545
1814
|
if has_prior_semantic_escalation(board, entry.assignment_id):
|
|
@@ -1555,6 +1824,7 @@ def dispatch_conflict_fix(
|
|
|
1555
1824
|
sealed_author = (
|
|
1556
1825
|
not semantic
|
|
1557
1826
|
and not stale_rebase
|
|
1827
|
+
and not reword_commit
|
|
1558
1828
|
and entry.assignment_type in SEALED_PATH_AUTHOR_TYPES
|
|
1559
1829
|
)
|
|
1560
1830
|
|
|
@@ -1610,6 +1880,14 @@ def dispatch_conflict_fix(
|
|
|
1610
1880
|
)
|
|
1611
1881
|
system_prompt = STALE_REBASE_FIX_SYSTEM_PROMPT
|
|
1612
1882
|
title = f"{STALE_REBASE_FIX_TITLE_PREFIX} {entry.issue_title}"
|
|
1883
|
+
elif reword_commit:
|
|
1884
|
+
briefing = build_reword_commit_briefing(
|
|
1885
|
+
entry=entry,
|
|
1886
|
+
repo_path=repo_path,
|
|
1887
|
+
test_command=repo.test_command,
|
|
1888
|
+
)
|
|
1889
|
+
system_prompt = REWORD_COMMIT_FIX_SYSTEM_PROMPT
|
|
1890
|
+
title = f"{REWORD_COMMIT_FIX_TITLE_PREFIX} {entry.issue_title}"
|
|
1613
1891
|
elif sealed_author:
|
|
1614
1892
|
briefing = build_sealed_manifest_conflict_briefing(
|
|
1615
1893
|
entry=entry,
|
|
@@ -1765,6 +2043,10 @@ def dispatch_conflict_fix(
|
|
|
1765
2043
|
# worker's mismatch refusal — same title/briefing either way,
|
|
1766
2044
|
# so this is the only durable trace of which path led here.
|
|
1767
2045
|
"after_stale_rebase_mismatch": after_stale_rebase_mismatch,
|
|
2046
|
+
# #3522: same reasoning — distinguishes the message-only reword
|
|
2047
|
+
# remedy from every other conflict-fix flavour without
|
|
2048
|
+
# re-deriving it from the title prefix.
|
|
2049
|
+
"reword_commit": reword_commit,
|
|
1768
2050
|
},
|
|
1769
2051
|
)
|
|
1770
2052
|
|
|
@@ -1006,16 +1006,19 @@ class OracleDecision:
|
|
|
1006
1006
|
— the argument :func:`_decide_acceptance_author` needs to build ``coord
|
|
1007
1007
|
acceptance author <repo> <tracking_issue> --issue <N>``.
|
|
1008
1008
|
|
|
1009
|
-
#2199: ``issue_exempt`` — resolved alongside ``active`` (same
|
|
1010
|
-
GitHub fetch budget: ``AcceptanceGateChecker.is_issue_exempt``
|
|
1011
|
-
#1138 hard gate's own manifest read) — is *this issue*'s
|
|
1012
|
-
``manifest.exempt``/``oracle:exempt`` opt-out from the sealed suite.
|
|
1013
|
-
:func:`
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1009
|
+
#2199/#2171: ``issue_exempt`` — resolved alongside ``active`` (same
|
|
1010
|
+
one-shot GitHub fetch budget: ``AcceptanceGateChecker.is_issue_exempt``
|
|
1011
|
+
reuses the #1138 hard gate's own manifest read) — is *this issue*'s
|
|
1012
|
+
``manifest.exempt``/``oracle:exempt`` opt-out from the sealed suite. An
|
|
1013
|
+
exempt issue makes :func:`resolve_oracle_decision` return ``active=False``
|
|
1014
|
+
(#2171 — it has no slice for a `test-author` session to write, so
|
|
1015
|
+
JIT-authoring must not run either), with ``issue_exempt=True`` and
|
|
1016
|
+
``reason`` naming the exemption for the preflight banner. ``True`` only
|
|
1017
|
+
ever coincides with ``active=False`` by construction; kept as its own
|
|
1018
|
+
field (rather than inferred from ``reason``) so
|
|
1019
|
+
:func:`_decide_acceptance_gate` and :func:`_dispatch_work_stage` can
|
|
1020
|
+
check it directly and defensively, without parsing prose. ``False``
|
|
1021
|
+
when the issue is not exempt, whatever ``active`` is.
|
|
1019
1022
|
"""
|
|
1020
1023
|
|
|
1021
1024
|
active: bool
|
|
@@ -1094,6 +1097,24 @@ def resolve_oracle_decision(
|
|
|
1094
1097
|
issue_exempt = gate_checker.is_issue_exempt(
|
|
1095
1098
|
state.repo, state.milestone_number, state.issue, state.issue_labels,
|
|
1096
1099
|
)
|
|
1100
|
+
if issue_exempt:
|
|
1101
|
+
# #2171: an issue in `manifest.exempt`/labelled `oracle:exempt` has
|
|
1102
|
+
# no sealed slice for a `type="test-author"` session to write — the
|
|
1103
|
+
# #1138 hard gate (`issue_oracle_ready`) would never block its Work
|
|
1104
|
+
# dispatch on one either. Returning INACTIVE here (not just setting
|
|
1105
|
+
# `issue_exempt=True` on an active decision) means BOTH downstream
|
|
1106
|
+
# gates fall through to a normal drive: `_dispatch_work_stage`
|
|
1107
|
+
# dispatches Work directly instead of authoring first, and
|
|
1108
|
+
# `_decide_acceptance_gate`'s trust gate never fires. Before this,
|
|
1109
|
+
# `active` stayed True for an exempt issue, so the JIT-authoring
|
|
1110
|
+
# step ran anyway — burning a metered dispatch for guaranteed-zero
|
|
1111
|
+
# output and then dead-ending with nothing left to dispatch Work.
|
|
1112
|
+
return OracleDecision(
|
|
1113
|
+
False,
|
|
1114
|
+
f"#{state.issue} is exempt in ms-{state.milestone_number}'s "
|
|
1115
|
+
"manifest — normal drive",
|
|
1116
|
+
issue_exempt=True,
|
|
1117
|
+
)
|
|
1097
1118
|
return OracleDecision(
|
|
1098
1119
|
True,
|
|
1099
1120
|
f"ORACLE DRIVE — ms-{state.milestone_number}'s Gate-A contract is "
|
|
@@ -1102,7 +1123,6 @@ def resolve_oracle_decision(
|
|
|
1102
1123
|
f"{state.milestone_tracking_issue} --issue {state.issue}`) before "
|
|
1103
1124
|
"dispatching work",
|
|
1104
1125
|
tracking_issue=state.milestone_tracking_issue,
|
|
1105
|
-
issue_exempt=issue_exempt,
|
|
1106
1126
|
)
|
|
1107
1127
|
|
|
1108
1128
|
|
|
@@ -2997,7 +3017,13 @@ def _dispatch_work_stage(
|
|
|
2997
3017
|
*counters* is threaded in for the slice's own merge budget (#2079 —
|
|
2998
3018
|
``DriveCounters.acceptance``); every other decision here is stateless.
|
|
2999
3019
|
"""
|
|
3000
|
-
if oracle is not None and oracle.active:
|
|
3020
|
+
if oracle is not None and oracle.active and not oracle.issue_exempt:
|
|
3021
|
+
# #2171: `oracle.active` alone already excludes an exempt issue
|
|
3022
|
+
# (`resolve_oracle_decision` returns `active=False` for one) — the
|
|
3023
|
+
# explicit `not oracle.issue_exempt` here is belt-and-suspenders,
|
|
3024
|
+
# mirroring `_decide_acceptance_gate`'s own guard below, so this
|
|
3025
|
+
# call site asks the SAME direct question rather than relying on
|
|
3026
|
+
# `active`'s meaning to carry it transitively.
|
|
3001
3027
|
assert gate_checker is not None and verifier is not None, (
|
|
3002
3028
|
"oracle.active implies resolve_oracle_decision ran with a real "
|
|
3003
3029
|
"gate_checker; decide()/Driver always thread one through"
|
|
@@ -329,7 +329,32 @@ PARK_STALE_SECONDS = 45 * 60.0
|
|
|
329
329
|
# the narrower predicate `coord.commands.drive_queue` uses to also stop its
|
|
330
330
|
# OWN independent auto-dispatch (the stale-rebase conflict-fix revalidation)
|
|
331
331
|
# from re-firing against a row that has already given up this way.
|
|
332
|
-
|
|
332
|
+
#
|
|
333
|
+
# #3522: `(#3522)` joined this tuple for a FOURTH shape, distinct from the
|
|
334
|
+
# three above in one way — it IS actively remedied, just never by relaunching
|
|
335
|
+
# a whole drive session. `coord.merge_queue.process()`'s own
|
|
336
|
+
# `issue_resolution_closing_keyword_in_commit` gate refuses to merge a branch
|
|
337
|
+
# whose PR is marked `ISSUE_RESOLUTION: partial`/`investigation` but whose
|
|
338
|
+
# commit message(s) still carry a GitHub closing keyword for that same issue
|
|
339
|
+
# — and, since #3522, dispatches a message-only reword-commit worker
|
|
340
|
+
# (`coord.conflict_fix.dispatch_conflict_fix(..., reword_commit=True)`) the
|
|
341
|
+
# moment it fires. Before that worker existed, a drive that exhausted its
|
|
342
|
+
# merge-attempt budget against this refusal (`_die`'s "merge attempted N
|
|
343
|
+
# times without landing", embedding this module's own diagnostic text
|
|
344
|
+
# verbatim) died into `blocked`, and this sweep's live-gate re-check — which
|
|
345
|
+
# has no way to observe "a commit got reworded on another machine", only
|
|
346
|
+
# whether the merge gate currently reads clear — kept reading the SAME
|
|
347
|
+
# refusal as "unlucky, re-check later" and burned its resume budget
|
|
348
|
+
# relaunching into it (claude-coordinator#3519's exact deadlock: three
|
|
349
|
+
# identical refusals, `resumes=1/3`, `2/3`, `3/3`, then stuck). The actual
|
|
350
|
+
# remedy runs entirely OUTSIDE this relaunch loop — a dedicated worker,
|
|
351
|
+
# dispatched from the merge gate itself, that force-pushes once it has
|
|
352
|
+
# verified the reword changed nothing but wording — so there is nothing for
|
|
353
|
+
# a drive-session relaunch to contribute here either; it can only duplicate
|
|
354
|
+
# spend while the real remedy is already in flight. See
|
|
355
|
+
# `coord.merge_queue.process`'s `issue_resolution_closing_keyword_in_commit`
|
|
356
|
+
# handling for where the marker's text originates.
|
|
357
|
+
_PERMANENT_BLOCK_MARKERS: tuple[str, ...] = ("(#1844)", "(#2019)", "(#2972)", "(#3522)")
|
|
333
358
|
|
|
334
359
|
|
|
335
360
|
def is_fix_round_ceiling_reason(reason: str | None) -> bool:
|
|
@@ -380,8 +405,13 @@ def is_fix_round_ceiling_blocked(state: str | None, last_reason: str | None) ->
|
|
|
380
405
|
|
|
381
406
|
|
|
382
407
|
def is_permanent_block_reason(text: str | None) -> bool:
|
|
383
|
-
"""Whether *text* names a
|
|
384
|
-
|
|
408
|
+
"""Whether *text* names a cause of `blocked` that #2230's sweep must
|
|
409
|
+
never re-check — **relaunching the drive session cannot change the
|
|
410
|
+
outcome**, whether that is because the block is truly permanent
|
|
411
|
+
(#1844/#2019/#2972) or because, #3522, the real remedy already runs
|
|
412
|
+
entirely outside this sweep's relaunch loop (a dedicated reword-commit
|
|
413
|
+
worker dispatched straight from the merge gate) and a resume here could
|
|
414
|
+
only duplicate that spend, never substitute for it.
|
|
385
415
|
|
|
386
416
|
Marker-based, the same convention `coord.gate_a.is_gate_a_refusal_reason`
|
|
387
417
|
uses for the analogous Gate-A classification: cheap, and correct even
|
|
@@ -7307,6 +7307,18 @@ def process(
|
|
|
7307
7307
|
an ``epic_closing_keyword_in_commit_forced`` warning event is still
|
|
7308
7308
|
emitted — the override is never silent.
|
|
7309
7309
|
|
|
7310
|
+
#3522: the identical commit-message shape for THIS entry's own issue
|
|
7311
|
+
(``issue_resolution_closing_keyword_in_commit`` — a `partial`/
|
|
7312
|
+
`investigation` ``ISSUE_RESOLUTION:`` verdict contradicted by its own
|
|
7313
|
+
commit message) is, unlike the epic case above, actually remedied: the
|
|
7314
|
+
moment the refusal fires, *board* and *config* permitting, this
|
|
7315
|
+
dispatches a message-only reword-commit worker
|
|
7316
|
+
(:func:`coord.conflict_fix.dispatch_conflict_fix` with
|
|
7317
|
+
``reword_commit=True``) so a future `coord merge` attempt can clear the
|
|
7318
|
+
refusal without an operator force-push. The merge itself still refuses
|
|
7319
|
+
THIS attempt either way — the dispatch is fire-and-forget, never
|
|
7320
|
+
awaited inline.
|
|
7321
|
+
|
|
7310
7322
|
Mutates `items` in place; the caller saves the queue after.
|
|
7311
7323
|
"""
|
|
7312
7324
|
events: list[MergeEvent] = []
|
|
@@ -8558,7 +8570,9 @@ def process(
|
|
|
8558
8570
|
f"GitHub would auto-close the issue on merge regardless of the "
|
|
8559
8571
|
f"PR body (#3502). Reword the commit message(s) to 'refs #N' "
|
|
8560
8572
|
f"and push, or pass --force-merge to merge anyway (the issue "
|
|
8561
|
-
f"WILL still auto-close)."
|
|
8573
|
+
f"WILL still auto-close). The coordinator dispatches an "
|
|
8574
|
+
f"automatic reword-commit worker for this (#3522); resuming "
|
|
8575
|
+
f"a drive session cannot fix it on its own."
|
|
8562
8576
|
)
|
|
8563
8577
|
if force_merge:
|
|
8564
8578
|
events.append(MergeEvent(
|
|
@@ -8569,6 +8583,70 @@ def process(
|
|
|
8569
8583
|
events.append(MergeEvent(
|
|
8570
8584
|
entry, "issue_resolution_closing_keyword_in_commit", msg,
|
|
8571
8585
|
))
|
|
8586
|
+
# #3522: nothing ever remedied this refusal before — a
|
|
8587
|
+
# worker's own commit convention (e.g. `Fix #N: ...`)
|
|
8588
|
+
# deadlocked every retry, and the drive-queue's own
|
|
8589
|
+
# resume sweep (`coord.drive_queue._reconcile_blocked`)
|
|
8590
|
+
# burned its resume budget relaunching into the
|
|
8591
|
+
# identical, unfixable-by-relaunch block
|
|
8592
|
+
# (claude-coordinator#3519). Dispatch the narrow,
|
|
8593
|
+
# message-only remedy the instant the gate fires, right
|
|
8594
|
+
# here — the SAME dispatcher #241/#3349 already use for
|
|
8595
|
+
# the mechanical/stale-CI shapes, so this is one more
|
|
8596
|
+
# caller of an existing worker, not a new mechanism.
|
|
8597
|
+
# Best-effort: *board*/*config* are only ``None`` for a
|
|
8598
|
+
# caller that never wired merge-gate state through in
|
|
8599
|
+
# the first place (dry runs, some unit tests), and a
|
|
8600
|
+
# dispatch failure (no machine, agent unreachable, …)
|
|
8601
|
+
# must never take down the merge refusal it's trying to
|
|
8602
|
+
# remedy.
|
|
8603
|
+
if board is not None and config is not None:
|
|
8604
|
+
# #3522 review (non-blocking): align with every other
|
|
8605
|
+
# `dispatch_conflict_fix` call site
|
|
8606
|
+
# (`commands/merge.py`'s `_machine_for_assignment`,
|
|
8607
|
+
# `notify.py`'s `prefer_machine=work.machine_name`) —
|
|
8608
|
+
# prefer the original worker's machine (it already
|
|
8609
|
+
# has the repo/branch checked out), opt into the
|
|
8610
|
+
# #3353 live-liveness check via `status_fetcher` (so
|
|
8611
|
+
# a machine that merely LOOKS idle because it's
|
|
8612
|
+
# offline isn't picked), and capture a rich decline
|
|
8613
|
+
# reason via `machine_pick_out` instead of the bare
|
|
8614
|
+
# `fix is None` the original code silently swallowed.
|
|
8615
|
+
from coord.conflict_fix import ( # noqa: PLC0415
|
|
8616
|
+
describe_conflict_fix_decline,
|
|
8617
|
+
dispatch_conflict_fix,
|
|
8618
|
+
)
|
|
8619
|
+
from coord.network import fetch_status # noqa: PLC0415
|
|
8620
|
+
|
|
8621
|
+
pick_out: list = []
|
|
8622
|
+
fix = None
|
|
8623
|
+
try:
|
|
8624
|
+
prefer = None
|
|
8625
|
+
target = board.find_by_id(entry.assignment_id)
|
|
8626
|
+
if target is not None:
|
|
8627
|
+
prefer = target.machine_name
|
|
8628
|
+
|
|
8629
|
+
fix = dispatch_conflict_fix(
|
|
8630
|
+
entry, board, config, reword_commit=True,
|
|
8631
|
+
prefer_machine=prefer,
|
|
8632
|
+
status_fetcher=fetch_status,
|
|
8633
|
+
machine_pick_out=pick_out,
|
|
8634
|
+
)
|
|
8635
|
+
except Exception: # noqa: BLE001
|
|
8636
|
+
fix = None
|
|
8637
|
+
if fix is not None:
|
|
8638
|
+
events.append(MergeEvent(
|
|
8639
|
+
entry, "issue_resolution_reword_dispatched",
|
|
8640
|
+
f"dispatched a reword-commit worker to "
|
|
8641
|
+
f"{fix.machine_name} for #{entry.issue_number} "
|
|
8642
|
+
f"(#3522)",
|
|
8643
|
+
))
|
|
8644
|
+
else:
|
|
8645
|
+
events.append(MergeEvent(
|
|
8646
|
+
entry, "conflict_fix_dispatch_declined",
|
|
8647
|
+
"reword-commit dispatch declined: "
|
|
8648
|
+
+ describe_conflict_fix_decline(pick_out),
|
|
8649
|
+
))
|
|
8572
8650
|
continue # #3502: refuse — never merge a branch that will
|
|
8573
8651
|
# auto-close an issue marked not-yet-resolved via a commit
|
|
8574
8652
|
# message we can't rewrite.
|