code-coordinator 0.5.557__tar.gz → 0.5.559__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.557 → code_coordinator-0.5.559}/PKG-INFO +1 -1
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agent.py +14 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/conflict_fix.py +282 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/drive_queue.py +33 -3
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/merge_queue.py +79 -1
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notify.py +38 -1
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/reconcile.py +112 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/win_native_bridge.py +217 -25
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent.py +14 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_conflict_fix.py +155 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue.py +58 -1
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_merge_queue.py +78 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile.py +110 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_win_native_bridge.py +197 -41
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.gitignore +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/CLAUDE.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/GOAL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/LICENSE +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/MANIFEST.in +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/README.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/__init__.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/audit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/backup.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/block_log.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/board_service.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/brain.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/bugbash.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/claim.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/cli.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/client.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/codegen.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/comments.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/config.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dao.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/db.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deps.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/drive.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/events.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/filelock.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/freshness.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gates.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/goal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/context.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/models.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/render.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/units.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/hooks.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/interactive.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/models.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/network.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/openapi.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/parentage.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/plans.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/progress.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_window.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/reports.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/review.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/self_health.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/smoke.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/split_work.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/sql.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/state.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/test_author.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/test_report.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/usage.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/install-agent.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/pyproject.toml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/setup.cfg +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/__init__.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/backends.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/conftest.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_bugbash.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_client.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_db.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_events.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_init.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_models.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_network.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_session.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_split.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_state.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.557 → code_coordinator-0.5.559}/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
|
|
|
@@ -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.
|
|
@@ -4034,10 +4034,21 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
4034
4034
|
# checked when semantic is False too) and route it to its own
|
|
4035
4035
|
# `already_upstream` arm, which never escalates to the ordinary
|
|
4036
4036
|
# conflict-fix path and never says "genuine content conflict".
|
|
4037
|
+
# #3522: the same clean-exit ambiguity applies to a reword-commit
|
|
4038
|
+
# dispatch (`dispatch_conflict_fix(..., reword_commit=True)`, used
|
|
4039
|
+
# for `issue_resolution_closing_keyword_in_commit`) — its briefing
|
|
4040
|
+
# tells the worker to stop and NOT push when the rewrite isn't
|
|
4041
|
+
# content-preserving. Check `REWORD_MISMATCH_MARKER` last (mutually
|
|
4042
|
+
# exclusive with the other three, so only checked when none of them
|
|
4043
|
+
# fired) and route it to its own `reword_mismatch` arm, which — like
|
|
4044
|
+
# `already_upstream` — never escalates to the ordinary conflict-fix
|
|
4045
|
+
# path (that worker's broader content-touching authorization is
|
|
4046
|
+
# exactly what this narrow dispatch was scoped to avoid).
|
|
4037
4047
|
parent_id = record.get("review_of_assignment_id")
|
|
4038
4048
|
if parent_id:
|
|
4039
4049
|
from coord.conflict_fix import ( # noqa: PLC0415
|
|
4040
4050
|
detect_already_upstream,
|
|
4051
|
+
detect_reword_mismatch,
|
|
4041
4052
|
detect_semantic_conflict,
|
|
4042
4053
|
detect_stale_rebase_mismatch,
|
|
4043
4054
|
)
|
|
@@ -4060,6 +4071,7 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
4060
4071
|
# not "genuine conflict") whenever both would otherwise apply.
|
|
4061
4072
|
already_upstream = False
|
|
4062
4073
|
stale_rebase_mismatch = False
|
|
4074
|
+
reword_mismatch = False
|
|
4063
4075
|
if not semantic:
|
|
4064
4076
|
try:
|
|
4065
4077
|
already_upstream = detect_already_upstream(
|
|
@@ -4078,6 +4090,15 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
4078
4090
|
)
|
|
4079
4091
|
except Exception: # noqa: BLE001
|
|
4080
4092
|
stale_rebase_mismatch = False
|
|
4093
|
+
if not stale_rebase_mismatch:
|
|
4094
|
+
try:
|
|
4095
|
+
reword_mismatch = detect_reword_mismatch(
|
|
4096
|
+
log_path=log_path,
|
|
4097
|
+
host=host,
|
|
4098
|
+
assignment_id=transition.assignment_id,
|
|
4099
|
+
)
|
|
4100
|
+
except Exception: # noqa: BLE001
|
|
4101
|
+
reword_mismatch = False
|
|
4081
4102
|
|
|
4082
4103
|
stuck_summary: str | None = None
|
|
4083
4104
|
board = None
|
|
@@ -4139,6 +4160,20 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
4139
4160
|
config = _load_config()
|
|
4140
4161
|
except Exception: # noqa: BLE001
|
|
4141
4162
|
board, config = None, None
|
|
4163
|
+
elif reword_mismatch:
|
|
4164
|
+
# #3522: no escalation dispatch happens for this verdict
|
|
4165
|
+
# either (see the module-level comment above), so board/
|
|
4166
|
+
# config aren't strictly needed — but grab the stuck summary
|
|
4167
|
+
# the same way so `on_conflict_fix_done`'s HUMAN_REQUIRED
|
|
4168
|
+
# text is specific.
|
|
4169
|
+
progress = entry.get("progress") or {}
|
|
4170
|
+
stuck_summary = progress.get("stuck")
|
|
4171
|
+
if not stuck_summary and log_path:
|
|
4172
|
+
try:
|
|
4173
|
+
from coord.progress import parse_progress # noqa: PLC0415
|
|
4174
|
+
stuck_summary = parse_progress(log_path).stuck
|
|
4175
|
+
except Exception: # noqa: BLE001
|
|
4176
|
+
stuck_summary = None
|
|
4142
4177
|
|
|
4143
4178
|
on_conflict_fix_done(
|
|
4144
4179
|
parent_assignment_id=parent_id,
|
|
@@ -4146,10 +4181,12 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
4146
4181
|
machine_name=transition.machine_name,
|
|
4147
4182
|
succeeded=not semantic
|
|
4148
4183
|
and not already_upstream
|
|
4149
|
-
and not stale_rebase_mismatch
|
|
4184
|
+
and not stale_rebase_mismatch
|
|
4185
|
+
and not reword_mismatch,
|
|
4150
4186
|
semantic=semantic,
|
|
4151
4187
|
already_upstream=already_upstream,
|
|
4152
4188
|
stale_rebase_mismatch=stale_rebase_mismatch,
|
|
4189
|
+
reword_mismatch=reword_mismatch,
|
|
4153
4190
|
board=board,
|
|
4154
4191
|
config=config,
|
|
4155
4192
|
stuck_summary=stuck_summary,
|