code-coordinator 0.5.227__tar.gz → 0.5.228__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.227 → code_coordinator-0.5.228}/PKG-INFO +1 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/conflict_fix.py +295 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/models.py +10 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notify.py +73 -39
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_conflict_fix.py +354 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_stalled_pipeline.py +109 -3
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/.gitignore +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/CLAUDE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/GOAL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/LICENSE +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/MANIFEST.in +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/README.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/agent.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/block_log.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/board_service.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/brain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/claim.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/client.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/comments.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/dao.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/db.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/deps.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/drive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/events.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/filelock.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/freshness.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/gates.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/goal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/context.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/models.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/render.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/health/units.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/hooks.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/interactive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/network.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/openapi.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/parentage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/plans.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/progress.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/release_window.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/reports.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/review.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/self_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/smoke.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/split_work.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/test_author.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/test_report.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/usage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/install-agent.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/pyproject.toml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/setup.cfg +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/conftest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_db.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_events.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_init.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_models.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_network.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_review.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_session.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_split.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.228}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -18,6 +18,19 @@ On success, the coordinator re-enqueues the original merge entry so
|
|
|
18
18
|
Why a separate module: same reason :mod:`coord.review` lives apart from
|
|
19
19
|
``coord.dispatch`` — conflict-fix is triggered by a merge_queue event, not
|
|
20
20
|
by a planner proposal, so it shares little with the work-dispatch shape.
|
|
21
|
+
|
|
22
|
+
#2555: a merge conflict on a :data:`coord.models.SEALED_PATH_AUTHOR_TYPES`
|
|
23
|
+
branch (``test-author``/``mock-author``) is a special case — this repo's own
|
|
24
|
+
CLAUDE.md tells every worker to never touch ``tests/acceptance/**``, so the
|
|
25
|
+
*ordinary* conflict-fix worker above structurally refuses the only edit
|
|
26
|
+
that would resolve it (almost always another slice's additive block in the
|
|
27
|
+
milestone's ``manifest.yml``) and no-ops. ``dispatch_conflict_fix`` detects
|
|
28
|
+
this from ``entry.assignment_type`` and dispatches a differently-briefed
|
|
29
|
+
worker instead — see :func:`build_sealed_manifest_conflict_briefing` — that
|
|
30
|
+
is explicitly authorized to resolve a ``manifest.yml`` conflict additively
|
|
31
|
+
and nothing else. It refuses (and the entry escalates to a human exactly
|
|
32
|
+
like any other conflict-fix failure) the moment the conflict reaches beyond
|
|
33
|
+
that one file.
|
|
21
34
|
"""
|
|
22
35
|
|
|
23
36
|
from __future__ import annotations
|
|
@@ -30,7 +43,13 @@ import httpx
|
|
|
30
43
|
from coord.config import Config
|
|
31
44
|
from coord.dispatch import AGENT_PORT
|
|
32
45
|
from coord.merge_queue import QueuedMerge
|
|
33
|
-
from coord.models import
|
|
46
|
+
from coord.models import (
|
|
47
|
+
SEALED_MANIFEST_FILENAME,
|
|
48
|
+
SEALED_PATH_AUTHOR_TYPES,
|
|
49
|
+
Assignment,
|
|
50
|
+
Board,
|
|
51
|
+
Machine,
|
|
52
|
+
)
|
|
34
53
|
|
|
35
54
|
|
|
36
55
|
CONFLICT_FIX_SYSTEM_PROMPT = """\
|
|
@@ -183,6 +202,248 @@ def build_semantic_conflict_briefing(
|
|
|
183
202
|
return "\n".join(lines)
|
|
184
203
|
|
|
185
204
|
|
|
205
|
+
# ── #2555: sealed-author (test-author/mock-author) conflict resolution ─────
|
|
206
|
+
#
|
|
207
|
+
# An ordinary conflict-fix worker (the briefing above) is dispatched with the
|
|
208
|
+
# generic CONFLICT_FIX_SYSTEM_PROMPT — no mention of `tests/acceptance/` at
|
|
209
|
+
# all — and every worker session, regardless of `system_prompt`, still gets
|
|
210
|
+
# this repo's own CLAUDE.md loaded, which tells it to never touch
|
|
211
|
+
# `tests/acceptance/**`. For a SEALED_PATH_AUTHOR_TYPES branch that IS almost
|
|
212
|
+
# always exactly where the conflict lives (another slice's block in the
|
|
213
|
+
# milestone's `manifest.yml`), so the ordinary worker structurally refuses
|
|
214
|
+
# the only edit that would resolve it and no-ops — the gap #2555 exists to
|
|
215
|
+
# close. This section gives that class of entry a differently-briefed worker
|
|
216
|
+
# that is explicitly, narrowly authorized to resolve a `manifest.yml`
|
|
217
|
+
# conflict additively, and told to refuse (STUCK, no guessing) the instant
|
|
218
|
+
# the conflict reaches beyond that one file — mirroring the existing
|
|
219
|
+
# mechanical/semantic self-classification pattern above, not a new
|
|
220
|
+
# escalation tier: a sealed-scope refusal has no stronger-model retry,
|
|
221
|
+
# since the file stays sealed regardless of which model resolves it.
|
|
222
|
+
|
|
223
|
+
# Marker a sealed conflict-fix worker's STUCK: line starts with when the
|
|
224
|
+
# conflict reaches outside the one file it's authorized to touch (a test
|
|
225
|
+
# body, contract.md, a mock, a fixture, an entry-point registration, or a
|
|
226
|
+
# manifest.yml edit that isn't a clean additive case). Same shape as
|
|
227
|
+
# SEMANTIC_STUCK_MARKER above — a fixed, machine-parseable string, not prose
|
|
228
|
+
# — but deliberately a DIFFERENT marker: `detect_semantic_conflict`/
|
|
229
|
+
# `semantic_verdict_in_text` must not mistake this for a mechanical/semantic
|
|
230
|
+
# verdict and route it into the (not sealed-aware) stronger-model escalation
|
|
231
|
+
# path, which would just reproduce the same self-refusal one level up.
|
|
232
|
+
SEALED_SCOPE_STUCK_MARKER = "coord:conflict=sealed-scope"
|
|
233
|
+
|
|
234
|
+
# Title prefix for a sealed-author conflict-fix dispatch — visible in the TUI
|
|
235
|
+
# Pipeline row so an operator can tell at a glance that this conflict-fix
|
|
236
|
+
# used the narrower, sealed-aware briefing rather than the ordinary one.
|
|
237
|
+
SEALED_CONFLICT_FIX_TITLE_PREFIX = "[sealed-conflict-fix]"
|
|
238
|
+
|
|
239
|
+
SEALED_MANIFEST_CONFLICT_SYSTEM_PROMPT = f"""\
|
|
240
|
+
You are a Claude Code conflict-fix worker for a SEALED acceptance-oracle \
|
|
241
|
+
branch (a test-author/mock-author slice under `tests/acceptance/`). The \
|
|
242
|
+
merge of this branch into its target failed because the branch is out of \
|
|
243
|
+
date or conflicts with another slice.
|
|
244
|
+
|
|
245
|
+
This repo's CLAUDE.md tells every ordinary worker to never touch \
|
|
246
|
+
`tests/acceptance/**` — that rule keeps the acceptance oracle independent \
|
|
247
|
+
of the workers it grades. It does NOT apply to you for this one narrow \
|
|
248
|
+
purpose: resolving a merge conflict in a milestone's \
|
|
249
|
+
`tests/acceptance/ms-NN/{SEALED_MANIFEST_FILENAME}`, the file every slice \
|
|
250
|
+
under that milestone appends its own block to. You are explicitly \
|
|
251
|
+
authorized to edit ONLY that file, and only additively.
|
|
252
|
+
|
|
253
|
+
Rules:
|
|
254
|
+
- The coordinator denies `gh` and `git push --force` for this worker. \
|
|
255
|
+
Don't try to use them — the harness will reject the call.
|
|
256
|
+
- Stay on the worker's branch — do NOT push to main / develop / target.
|
|
257
|
+
- Use git push --force-with-lease (NOT --force).
|
|
258
|
+
- Rebase onto the target branch. If the ONLY conflict is inside a \
|
|
259
|
+
`{SEALED_MANIFEST_FILENAME}` under `tests/acceptance/`, resolve it \
|
|
260
|
+
ADDITIVELY: keep BOTH sides' issue blocks, without reordering or rewriting \
|
|
261
|
+
any block that isn't yours. Never delete or rewrite another issue's block \
|
|
262
|
+
— this mirrors the "one block per issue, later slices merge in" rule the \
|
|
263
|
+
manifest files document in their own header comment.
|
|
264
|
+
- Do NOT create, edit, or delete ANY OTHER file under `tests/acceptance/` \
|
|
265
|
+
— not a test body, not `contract.md`, not a mock, not a fixture, not an \
|
|
266
|
+
entry-point registration. Those stay sealed even for you.
|
|
267
|
+
- If the conflict is NOT confined to a `{SEALED_MANIFEST_FILENAME}` — it \
|
|
268
|
+
also touches a test body or any other sealed file, OR the \
|
|
269
|
+
`{SEALED_MANIFEST_FILENAME}` conflict itself is not a clean additive case \
|
|
270
|
+
(e.g. the same issue's own block was edited two different ways) — DO NOT \
|
|
271
|
+
GUESS and do NOT touch it. Exit non-zero with a STUCK: line that starts \
|
|
272
|
+
with the exact marker `{SEALED_SCOPE_STUCK_MARKER}` and then names the \
|
|
273
|
+
file(s) in conflict, e.g.
|
|
274
|
+
STUCK: {SEALED_SCOPE_STUCK_MARKER} tests/acceptance/ms-33/audit.rs:1-40 \
|
|
275
|
+
— conflict is in a test body, not {SEALED_MANIFEST_FILENAME}
|
|
276
|
+
The coordinator reads that marker and hands this off to a human — there is \
|
|
277
|
+
no stronger-model retry for this class of conflict, since the file stays \
|
|
278
|
+
sealed regardless of which model resolves it.
|
|
279
|
+
|
|
280
|
+
Progress reporting:
|
|
281
|
+
- After each significant step (rebase started, manifest conflict resolved, \
|
|
282
|
+
tests passed, pushed), output:
|
|
283
|
+
STATUS: [what you just did] → [what you're about to do] → [confidence]
|
|
284
|
+
- If you stop, output the STUCK: line described above and wait for \
|
|
285
|
+
guidance.\
|
|
286
|
+
"""
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def build_sealed_manifest_conflict_briefing(
|
|
290
|
+
*,
|
|
291
|
+
entry: QueuedMerge,
|
|
292
|
+
repo_path: str,
|
|
293
|
+
test_command: str | None,
|
|
294
|
+
) -> str:
|
|
295
|
+
"""Briefing for a conflict-fix dispatched against a
|
|
296
|
+
:data:`coord.models.SEALED_PATH_AUTHOR_TYPES` branch (#2555).
|
|
297
|
+
|
|
298
|
+
Unlike :func:`build_conflict_fix_briefing`, this worker IS authorized to
|
|
299
|
+
edit one specific sealed file — the milestone's ``manifest.yml`` —
|
|
300
|
+
because that is the one file every acceptance slice under a milestone
|
|
301
|
+
appends an additive block to (see e.g.
|
|
302
|
+
``tests/acceptance/ms-33/manifest.yml``'s own header comment), so a
|
|
303
|
+
two-slice collision there is a mechanical, written-down-rule merge, not
|
|
304
|
+
a semantic one. Everything else under ``tests/acceptance/`` stays
|
|
305
|
+
off-limits — see :data:`SEALED_MANIFEST_CONFLICT_SYSTEM_PROMPT`'s
|
|
306
|
+
"Rules" for the exact boundary and :data:`SEALED_SCOPE_STUCK_MARKER`,
|
|
307
|
+
the marker the worker uses to escalate when the conflict crosses it.
|
|
308
|
+
"""
|
|
309
|
+
test_cmd = test_command or "echo '(no test command configured)'"
|
|
310
|
+
lines: list[str] = [
|
|
311
|
+
f"# Sealed conflict fix: {entry.repo_github} branch `{entry.branch}`",
|
|
312
|
+
"",
|
|
313
|
+
f"The merge of `{entry.branch}` → `{entry.target_branch}` failed.",
|
|
314
|
+
f"Reason: {entry.error or 'unknown conflict'}",
|
|
315
|
+
"",
|
|
316
|
+
f"Issue: #{entry.issue_number} — {entry.issue_title}",
|
|
317
|
+
f"Assignment type: `{entry.assignment_type}` — this branch's whole "
|
|
318
|
+
"job was authoring under `tests/acceptance/`, so its conflict is "
|
|
319
|
+
f"almost always another slice's additive edit to the same "
|
|
320
|
+
f"milestone's `{SEALED_MANIFEST_FILENAME}`.",
|
|
321
|
+
"",
|
|
322
|
+
"## Where you are",
|
|
323
|
+
"",
|
|
324
|
+
f"You are already in a dedicated git worktree checked out on "
|
|
325
|
+
f"`{entry.branch}` — the coordinator created it for you. Work HERE.",
|
|
326
|
+
"",
|
|
327
|
+
f"Do **NOT** `cd {repo_path}` (that is the machine's shared base "
|
|
328
|
+
"checkout) and do NOT `git checkout` / `git switch` anywhere. Leaving "
|
|
329
|
+
f"the base checkout parked on `{entry.branch}` breaks every later "
|
|
330
|
+
"dispatch against that branch on this machine (#1694).",
|
|
331
|
+
"",
|
|
332
|
+
"## Steps",
|
|
333
|
+
"",
|
|
334
|
+
"1. `git fetch origin`",
|
|
335
|
+
f"2. `git pull --rebase origin {entry.target_branch}`",
|
|
336
|
+
f"3. If a conflict marker appears in a `{SEALED_MANIFEST_FILENAME}` "
|
|
337
|
+
"under `tests/acceptance/`, resolve it by keeping BOTH sides' issue "
|
|
338
|
+
"blocks (additive — see the system prompt's rules). If a conflict "
|
|
339
|
+
"marker appears ANYWHERE ELSE, stop — see \"When NOT to guess\" "
|
|
340
|
+
"below.",
|
|
341
|
+
f"4. Run tests: `{test_cmd}`",
|
|
342
|
+
f"5. `git push --force-with-lease origin {entry.branch}`",
|
|
343
|
+
"6. Exit 0 if push succeeds; non-zero otherwise.",
|
|
344
|
+
"",
|
|
345
|
+
"## When NOT to guess",
|
|
346
|
+
"",
|
|
347
|
+
f"You are authorized to edit ONLY a `{SEALED_MANIFEST_FILENAME}` "
|
|
348
|
+
"under `tests/acceptance/`, and only additively. If the conflict "
|
|
349
|
+
"touches a test body, `contract.md`, a mock, a fixture, an "
|
|
350
|
+
"entry-point registration, or anything else sealed — or the "
|
|
351
|
+
f"`{SEALED_MANIFEST_FILENAME}` conflict is not a clean additive "
|
|
352
|
+
"case — DO NOT touch it. Exit non-zero with a `STUCK:` line "
|
|
353
|
+
f"starting with the exact marker `{SEALED_SCOPE_STUCK_MARKER}` and "
|
|
354
|
+
"the file(s)/reason, e.g.",
|
|
355
|
+
"",
|
|
356
|
+
f" STUCK: {SEALED_SCOPE_STUCK_MARKER} tests/acceptance/ms-33/"
|
|
357
|
+
"audit.rs:1-40 — conflict is in a test body, not "
|
|
358
|
+
f"{SEALED_MANIFEST_FILENAME}",
|
|
359
|
+
"",
|
|
360
|
+
"The coordinator reads that marker and hands this off to a human — "
|
|
361
|
+
"there is no stronger-model retry for this class of conflict, since "
|
|
362
|
+
"the file stays sealed regardless of which model resolves it.",
|
|
363
|
+
"",
|
|
364
|
+
"You will NOT use `gh` or `git push --force` — both are denied by "
|
|
365
|
+
"the harness. The coordinator owns PR retries and issue posting.",
|
|
366
|
+
]
|
|
367
|
+
return "\n".join(lines)
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
def sealed_scope_verdict_in_text(text: str | None) -> bool:
|
|
371
|
+
"""True when a sealed conflict-fix worker's log carries the
|
|
372
|
+
:data:`SEALED_SCOPE_STUCK_MARKER` — i.e. it refused because the conflict
|
|
373
|
+
reached outside the one ``manifest.yml`` it was authorized to touch.
|
|
374
|
+
Mirrors :func:`semantic_verdict_in_text`.
|
|
375
|
+
"""
|
|
376
|
+
if not text:
|
|
377
|
+
return False
|
|
378
|
+
return SEALED_SCOPE_STUCK_MARKER in _decode_worker_text(text)
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
def _is_sealed_manifest_path(path: str) -> bool:
|
|
382
|
+
"""True when *path* is (any milestone's) ``manifest.yml`` — the one file
|
|
383
|
+
a sealed-author conflict-fix dispatch is authorized to touch."""
|
|
384
|
+
return path.rsplit("/", 1)[-1] == SEALED_MANIFEST_FILENAME
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def sealed_conflict_is_manifest_only(files: list[str]) -> bool:
|
|
388
|
+
"""True when every path in *files* is a milestone acceptance
|
|
389
|
+
``manifest.yml`` — exactly the shape :func:`dispatch_conflict_fix`'s
|
|
390
|
+
sealed-author branch (#2555) is authorized to resolve.
|
|
391
|
+
|
|
392
|
+
*files* is expected to already be confirmed confined to a repo's sealed
|
|
393
|
+
acceptance paths (e.g. via ``coord.notify._conflict_confined_to_sealed_
|
|
394
|
+
paths``, a GitHub-compare-API best-effort check) — this function only
|
|
395
|
+
narrows that further, from "somewhere under the sealed tree" to
|
|
396
|
+
"nowhere but a manifest.yml". A conflict that also touches a test body,
|
|
397
|
+
``contract.md``, a mock, or any other sealed file returns ``False`` —
|
|
398
|
+
out of this resolver's authority, still needs a human. An empty list
|
|
399
|
+
also returns ``False`` (nothing to confirm as manifest-only).
|
|
400
|
+
|
|
401
|
+
NOTE (#2555 review): this is an EXACT-match test, and *files* coming
|
|
402
|
+
from a whole-branch compare (as opposed to the actual git-conflicting
|
|
403
|
+
subset) is normally a SUPERSET of what is really in conflict — a real
|
|
404
|
+
test-author/mock-author slice's own diff almost always also contains
|
|
405
|
+
the spec/test file(s) it authored alongside its ``manifest.yml`` edit.
|
|
406
|
+
Do not use this function to GATE a dispatch decision against a whole-
|
|
407
|
+
branch-diff file list — it will reject the common, textbook-compliant
|
|
408
|
+
case outright. Use :func:`sealed_conflict_could_touch_manifest` for
|
|
409
|
+
that; this function stays as the precise "IS it manifest-only" test for
|
|
410
|
+
a caller that already has the true conflicting-file set (e.g. a future
|
|
411
|
+
local ``git merge-tree``-based check — #2555 review, fix direction b).
|
|
412
|
+
"""
|
|
413
|
+
return bool(files) and all(_is_sealed_manifest_path(f) for f in files)
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
def sealed_conflict_could_touch_manifest(files: list[str]) -> bool:
|
|
417
|
+
"""True when at least one path in *files* is a milestone acceptance
|
|
418
|
+
``manifest.yml`` — i.e. the sealed-aware conflict-fix branch (#2555)
|
|
419
|
+
MIGHT have something to resolve here.
|
|
420
|
+
|
|
421
|
+
Unlike :func:`sealed_conflict_is_manifest_only` (which requires EVERY
|
|
422
|
+
file to be a manifest.yml), *files* here is expected to be a branch's
|
|
423
|
+
WHOLE changed-file list (``coord.notify._conflict_confined_to_sealed_
|
|
424
|
+
paths``'s three-dot compare) — a SUPERSET of whatever is actually in
|
|
425
|
+
git-merge conflict, since GitHub's compare API has no notion of "which
|
|
426
|
+
files conflict", only "which files differ between two refs". Requiring
|
|
427
|
+
every file in that superset to be a manifest.yml rejects the common,
|
|
428
|
+
textbook-compliant test-author/mock-author shape outright: such a
|
|
429
|
+
branch's own diff almost always also contains the new spec/test file(s)
|
|
430
|
+
it authored alongside its ``manifest.yml`` edit (#2555 review finding).
|
|
431
|
+
|
|
432
|
+
Requiring only that a manifest.yml appears SOMEWHERE in the branch's
|
|
433
|
+
diff is still a sound negative filter: a file can only be in conflict
|
|
434
|
+
if this branch's diff touches it too, so when no manifest.yml appears
|
|
435
|
+
in *files* at all, no manifest.yml conflict is possible and dispatching
|
|
436
|
+
the sealed-aware resolver is a guaranteed no-op — safe to skip. When a
|
|
437
|
+
manifest.yml IS present (whether alongside other sealed files or not),
|
|
438
|
+
dispatch and let the worker's own additive-only restriction
|
|
439
|
+
(:data:`SEALED_MANIFEST_CONFLICT_SYSTEM_PROMPT`) do the PRECISE
|
|
440
|
+
filtering at rebase time — it refuses via
|
|
441
|
+
:data:`SEALED_SCOPE_STUCK_MARKER` the instant the actual conflict
|
|
442
|
+
reaches beyond that one file, exactly as designed.
|
|
443
|
+
"""
|
|
444
|
+
return any(_is_sealed_manifest_path(f) for f in files)
|
|
445
|
+
|
|
446
|
+
|
|
186
447
|
def build_conflict_fix_briefing(
|
|
187
448
|
*,
|
|
188
449
|
entry: QueuedMerge,
|
|
@@ -522,6 +783,25 @@ def dispatch_conflict_fix(
|
|
|
522
783
|
while another conflict-fix is in flight. Because the escalated attempt
|
|
523
784
|
is itself a ``conflict-fix`` row, its failure consumes the ordinary
|
|
524
785
|
retry cap and the entry goes HUMAN_REQUIRED — no loop.
|
|
786
|
+
|
|
787
|
+
#2555: when *entry.assignment_type* is a
|
|
788
|
+
:data:`coord.models.SEALED_PATH_AUTHOR_TYPES` member (``test-author``/
|
|
789
|
+
``mock-author``) — captured on the entry at ``enqueue()`` time, so no
|
|
790
|
+
extra board lookup is needed — and *semantic* is ``False``, this
|
|
791
|
+
dispatches the sealed-aware briefing (see
|
|
792
|
+
:func:`build_sealed_manifest_conflict_briefing`) instead of the ordinary
|
|
793
|
+
one. The ordinary briefing is a guaranteed no-op for this branch class:
|
|
794
|
+
its worker gets no authorization to touch ``tests/acceptance/**`` and
|
|
795
|
+
this repo's own CLAUDE.md, loaded into every session regardless of
|
|
796
|
+
``system_prompt``, tells it never to. The sealed-aware briefing narrowly
|
|
797
|
+
authorizes exactly the one file (a milestone's ``manifest.yml``) most of
|
|
798
|
+
these conflicts actually live in, and refuses (STUCK, retry cap consumed
|
|
799
|
+
exactly like any other conflict-fix failure) the moment the conflict
|
|
800
|
+
reaches beyond it — same retry-cap and machine-selection logic as
|
|
801
|
+
everywhere else in this function, only the briefing/system-prompt/title
|
|
802
|
+
differ. Not wired into the ``semantic=True`` escalation path: a sealed
|
|
803
|
+
entry's refusal is a scope boundary, not a call for a stronger model —
|
|
804
|
+
the file stays sealed regardless of which model resolves it.
|
|
525
805
|
"""
|
|
526
806
|
if semantic:
|
|
527
807
|
if has_prior_semantic_escalation(board, entry.assignment_id):
|
|
@@ -533,6 +813,8 @@ def dispatch_conflict_fix(
|
|
|
533
813
|
):
|
|
534
814
|
return None
|
|
535
815
|
|
|
816
|
+
sealed_author = not semantic and entry.assignment_type in SEALED_PATH_AUTHOR_TYPES
|
|
817
|
+
|
|
536
818
|
repo = config.repo(entry.repo_name)
|
|
537
819
|
if repo is None:
|
|
538
820
|
return None
|
|
@@ -561,6 +843,14 @@ def dispatch_conflict_fix(
|
|
|
561
843
|
title = f"{SEMANTIC_FIX_TITLE_PREFIX} {entry.issue_title}"
|
|
562
844
|
if model:
|
|
563
845
|
title = f"{SEMANTIC_FIX_TITLE_PREFIX}[{model}] {entry.issue_title}"
|
|
846
|
+
elif sealed_author:
|
|
847
|
+
briefing = build_sealed_manifest_conflict_briefing(
|
|
848
|
+
entry=entry,
|
|
849
|
+
repo_path=repo_path,
|
|
850
|
+
test_command=repo.test_command,
|
|
851
|
+
)
|
|
852
|
+
system_prompt = SEALED_MANIFEST_CONFLICT_SYSTEM_PROMPT
|
|
853
|
+
title = f"{SEALED_CONFLICT_FIX_TITLE_PREFIX} {entry.issue_title}"
|
|
564
854
|
else:
|
|
565
855
|
briefing = build_conflict_fix_briefing(
|
|
566
856
|
entry=entry,
|
|
@@ -683,6 +973,10 @@ def dispatch_conflict_fix(
|
|
|
683
973
|
"merge_entry_id": entry.assignment_id,
|
|
684
974
|
"semantic": semantic,
|
|
685
975
|
"model": model,
|
|
976
|
+
# #2555: lets the audit trail (and anyone diffing it) tell a
|
|
977
|
+
# narrowly-authorized sealed-manifest dispatch apart from the
|
|
978
|
+
# ordinary conflict-fix without re-deriving it from the title.
|
|
979
|
+
"sealed_author": sealed_author,
|
|
686
980
|
},
|
|
687
981
|
)
|
|
688
982
|
|
|
@@ -292,6 +292,16 @@ WORK_LIKE_TYPES: frozenset[str] = frozenset({"work", "mock-author", "test-author
|
|
|
292
292
|
# needs to be added in one place.
|
|
293
293
|
SEALED_PATH_AUTHOR_TYPES: frozenset[str] = frozenset({"test-author", "mock-author"})
|
|
294
294
|
|
|
295
|
+
# #2555: filename of the one sealed-acceptance file a `type="conflict-fix"`
|
|
296
|
+
# dispatch is ever authorized to edit for a SEALED_PATH_AUTHOR_TYPES branch —
|
|
297
|
+
# every milestone's `tests/acceptance/ms-NN/manifest.yml`, which every slice
|
|
298
|
+
# under that milestone additively appends its own issue block to (see e.g.
|
|
299
|
+
# `tests/acceptance/ms-33/manifest.yml`'s own header comment: "Merged (never
|
|
300
|
+
# clobbered) across issues"). `coord.conflict_fix`'s sealed-author dispatch
|
|
301
|
+
# branch and `coord.notify`'s stalled-pipeline confinement check both key off
|
|
302
|
+
# this exact name, kept here as a single shared constant so they can't drift.
|
|
303
|
+
SEALED_MANIFEST_FILENAME = "manifest.yml"
|
|
304
|
+
|
|
295
305
|
# #1077: subset of WORK_LIKE_TYPES whose ``issue_number`` is the issue the PR
|
|
296
306
|
# actually *resolves* — i.e. merging it should auto-close that issue. "work"
|
|
297
307
|
# qualifies. "mock-author" (Gate A) is WORK_LIKE (it flows through the same
|
|
@@ -993,14 +993,22 @@ class StalledDispatchAction:
|
|
|
993
993
|
(#602).
|
|
994
994
|
- ``"skipped_human_required"`` — the conflict-fix retry cap was already
|
|
995
995
|
hit; surfacing to a human, not auto-retrying.
|
|
996
|
-
- ``"skipped_sealed_conflict"`` (#2537) —
|
|
997
|
-
on a
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
996
|
+
- ``"skipped_sealed_conflict"`` (#2537, narrowed by #2555) —
|
|
997
|
+
``merge_conflict_unresolved`` on a
|
|
998
|
+
:data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row whose conflict was
|
|
999
|
+
confirmed (:func:`_conflict_confined_to_sealed_paths`) to be confined
|
|
1000
|
+
to the repo's sealed acceptance-oracle paths AND (#2555:
|
|
1001
|
+
:func:`coord.conflict_fix.sealed_conflict_could_touch_manifest`) NO
|
|
1002
|
+
file in that (whole-branch-diff) list is even a milestone
|
|
1003
|
+
``manifest.yml`` — i.e. a manifest.yml conflict is provably
|
|
1004
|
+
impossible, so the sealed-aware conflict-fix branch is guaranteed to
|
|
1005
|
+
have nothing to resolve. Whenever a manifest.yml DOES appear in that
|
|
1006
|
+
list — whether alone or alongside other sealed files the branch also
|
|
1007
|
+
authored, the realistic common shape — this no longer skips here: it
|
|
1008
|
+
falls through to :func:`coord.conflict_fix.dispatch_conflict_fix`,
|
|
1009
|
+
whose sealed-author branch (#2555) attempts it and lets the worker's
|
|
1010
|
+
own additive-only restriction do the precise, per-file filtering at
|
|
1011
|
+
rebase time.
|
|
1004
1012
|
- ``"disabled"`` — ``pipeline.auto_dispatch_stalled`` is
|
|
1005
1013
|
off; detection/narration still happened, dispatch did not.
|
|
1006
1014
|
"""
|
|
@@ -1150,11 +1158,20 @@ def dispatch_stalled_pipeline_action(
|
|
|
1150
1158
|
:data:`coord.models.SEALED_PATH_AUTHOR_TYPES` row AND the conflict can
|
|
1151
1159
|
be confirmed (via :func:`_conflict_confined_to_sealed_paths`, a
|
|
1152
1160
|
compare-API-only check) to be confined to the repo's sealed
|
|
1153
|
-
acceptance-oracle paths
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1161
|
+
acceptance-oracle paths AND (#2555:
|
|
1162
|
+
:func:`coord.conflict_fix.sealed_conflict_could_touch_manifest`) that
|
|
1163
|
+
confined, whole-branch-diff file list contains no manifest.yml at
|
|
1164
|
+
all — a manifest.yml conflict is then provably impossible, and a
|
|
1165
|
+
conflict-fix worker is REQUIRED by CLAUDE.md's own sealed-path rule to
|
|
1166
|
+
self-restrict from editing any OTHER sealed file, so it is guaranteed
|
|
1167
|
+
to push nothing; that case returns ``"skipped_sealed_conflict"``
|
|
1168
|
+
instead of spending a worker session on a known no-op. When a
|
|
1169
|
+
manifest.yml IS present in that list (even alongside other sealed
|
|
1170
|
+
files the branch also authored — the realistic common shape), this
|
|
1171
|
+
falls through to the ordinary dispatch, whose sealed-author branch
|
|
1172
|
+
(#2555) resolves a genuine manifest-only conflict and self-refuses,
|
|
1173
|
+
exactly like any other conflict-fix failure, the instant the actual
|
|
1174
|
+
conflict reaches beyond that file.
|
|
1158
1175
|
- ``review_failed_no_verdict`` (#1584) → :func:`coord.review.dispatch_review`
|
|
1159
1176
|
again, the SAME call as ``done_no_review`` — the failed review left no
|
|
1160
1177
|
verdict behind, so recovery is identical to "no review was ever
|
|
@@ -1479,6 +1496,7 @@ def dispatch_stalled_pipeline_action(
|
|
|
1479
1496
|
from coord.conflict_fix import ( # noqa: PLC0415
|
|
1480
1497
|
dispatch_conflict_fix,
|
|
1481
1498
|
has_prior_conflict_fix,
|
|
1499
|
+
sealed_conflict_could_touch_manifest,
|
|
1482
1500
|
)
|
|
1483
1501
|
from coord.merge_queue import load_queue # noqa: PLC0415
|
|
1484
1502
|
|
|
@@ -1496,35 +1514,51 @@ def dispatch_stalled_pipeline_action(
|
|
|
1496
1514
|
kind="skipped_human_required",
|
|
1497
1515
|
detail="conflict-fix already active or its retry cap was already hit",
|
|
1498
1516
|
)
|
|
1499
|
-
# #2537: dispatch_conflict_fix
|
|
1500
|
-
# confined to the repo's sealed acceptance-oracle paths —
|
|
1501
|
-
# conflict-fix worker is
|
|
1502
|
-
# rule to self-restrict from editing them (the additive
|
|
1503
|
-
#
|
|
1504
|
-
# conflict-fix)
|
|
1505
|
-
# next tick
|
|
1506
|
-
#
|
|
1507
|
-
#
|
|
1508
|
-
#
|
|
1509
|
-
#
|
|
1510
|
-
#
|
|
1511
|
-
#
|
|
1512
|
-
#
|
|
1517
|
+
# #2537/#2555: dispatch_conflict_fix used to be guaranteed to no-op on
|
|
1518
|
+
# a conflict confined to the repo's sealed acceptance-oracle paths —
|
|
1519
|
+
# an ordinary conflict-fix worker is required by CLAUDE.md's own
|
|
1520
|
+
# sealed-path rule to self-restrict from editing them (the additive
|
|
1521
|
+
# carve-out applied only to test-author/mock-author dispatches, never
|
|
1522
|
+
# conflict-fix) — so it pushed nothing and the entry just re-stalled
|
|
1523
|
+
# next tick (confirmed live on coord-portal#132/#135). #2555 gave
|
|
1524
|
+
# `dispatch_conflict_fix` a sealed-aware branch (keyed off
|
|
1525
|
+
# `entry.assignment_type`, the same field checked below) that CAN
|
|
1526
|
+
# resolve the one shape that guarantee doesn't hold for: a conflict
|
|
1527
|
+
# confined to a milestone's `manifest.yml` — the file every slice
|
|
1528
|
+
# under that milestone additively appends its own block to.
|
|
1529
|
+
#
|
|
1530
|
+
# `sealed_files` here is `entry`'s WHOLE branch diff (the three-dot
|
|
1531
|
+
# compare), not the actual conflicting subset — GitHub's compare API
|
|
1532
|
+
# cannot report "which files conflict", only "which files differ".
|
|
1533
|
+
# A real test-author/mock-author slice's own diff almost always ALSO
|
|
1534
|
+
# contains the spec/test file(s) it authored alongside its
|
|
1535
|
+
# `manifest.yml` edit, so gating on "every file in this superset is
|
|
1536
|
+
# a manifest.yml" (`sealed_conflict_is_manifest_only`) rejected the
|
|
1537
|
+
# common, textbook-compliant case outright (#2555 review finding).
|
|
1538
|
+
# Gate on "a manifest.yml appears somewhere in the superset" instead
|
|
1539
|
+
# (`sealed_conflict_could_touch_manifest`) — still a sound negative
|
|
1540
|
+
# filter (a file can only conflict if this branch touches it too, so
|
|
1541
|
+
# NO manifest.yml anywhere in the diff means a manifest.yml conflict
|
|
1542
|
+
# is impossible and dispatch would be a guaranteed no-op) — and let
|
|
1543
|
+
# the worker's own additive-only restriction do the PRECISE
|
|
1544
|
+
# filtering at rebase time, refusing via `SEALED_SCOPE_STUCK_MARKER`
|
|
1545
|
+
# the instant the actual conflict reaches beyond that one file.
|
|
1513
1546
|
if work.type in SEALED_PATH_AUTHOR_TYPES:
|
|
1514
1547
|
sealed_files = _conflict_confined_to_sealed_paths(entry, config)
|
|
1515
1548
|
if sealed_files is not None:
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1549
|
+
if not sealed_conflict_could_touch_manifest(sealed_files):
|
|
1550
|
+
return StalledDispatchAction(
|
|
1551
|
+
kind="skipped_sealed_conflict",
|
|
1552
|
+
detail=(
|
|
1553
|
+
"conflict is confined to sealed acceptance paths ("
|
|
1554
|
+
+ ", ".join(sealed_files)
|
|
1555
|
+
+ ") and none of them is a manifest.yml — the "
|
|
1556
|
+
"sealed conflict-fix branch (#2555) is only "
|
|
1557
|
+
"authorized to resolve a manifest.yml conflict, "
|
|
1558
|
+
"so a worker would push nothing here; needs a "
|
|
1559
|
+
"human"
|
|
1560
|
+
),
|
|
1561
|
+
)
|
|
1528
1562
|
fix = dispatch_conflict_fix(entry, board, config, prefer_machine=work.machine_name)
|
|
1529
1563
|
if fix is None:
|
|
1530
1564
|
return StalledDispatchAction(
|