code-coordinator 0.5.185__tar.gz → 0.5.187__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.185 → code_coordinator-0.5.187}/PKG-INFO +1 -1
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/merge.py +3 -1
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/config.py +9 -5
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/conflict_fix.py +55 -6
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-web-dist-build.service +6 -5
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-web-dist-build.timer +12 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/deploy_lane_facts.py +28 -24
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/fleet_deploy_lanes.py +2 -2
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/merge_queue.py +12 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notify.py +8 -2
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/release_verify.py +1 -1
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web-dist-build.service +6 -5
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web-dist-build.sh +56 -30
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web-dist-build.timer +12 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ADR_COORD_WEB_DIST.md +11 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/AGENT_OPERATIONS.md +14 -12
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/PHONE_WEBAPP.md +14 -10
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_conflict_fix.py +94 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_coord_web_dist.py +82 -2
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_deploy_lane_facts.py +66 -18
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/.gitignore +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/CLAUDE.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/GOAL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/LICENSE +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/MANIFEST.in +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/README.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/__init__.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agent.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/audit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/block_log.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/board_service.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/brain.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/claim.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/cli.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/client.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/comments.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dao.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/db.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deps.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/drive.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/events.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/filelock.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/freshness.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/gates.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/goal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/context.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/models.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/render.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/units.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/hooks.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/interactive.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/models.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/network.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/openapi.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/parentage.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/plans.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/progress.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/release_window.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/reports.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/review.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/self_health.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/smoke.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/split_work.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/state.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/test_author.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/test_report.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/usage.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/install-agent.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/pyproject.toml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/setup.cfg +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/__init__.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/conftest.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_db.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_events.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_init.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_models.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_network.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_session.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_split.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_state.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.185 → code_coordinator-0.5.187}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -456,7 +456,9 @@ def _dispatch_conflict_fixes(events, config, *, dry_run: bool) -> None:
|
|
|
456
456
|
# failed for this entry in this session, don't loop — mark
|
|
457
457
|
# HUMAN_REQUIRED so the user takes over. A successful
|
|
458
458
|
# prior fix does not trigger this guard (#784).
|
|
459
|
-
if has_prior_conflict_fix(
|
|
459
|
+
if has_prior_conflict_fix(
|
|
460
|
+
fix_board, ev.entry.assignment_id, current_error=ev.entry.error,
|
|
461
|
+
):
|
|
460
462
|
ev.entry.state = HUMAN_REQUIRED
|
|
461
463
|
click.echo(
|
|
462
464
|
f" {ev.entry.repo_name} #{ev.entry.issue_number}: "
|
|
@@ -1617,11 +1617,15 @@ class HealthConfig:
|
|
|
1617
1617
|
# None → ~/coord-web-dist — the symlink `deploy/coord-web-dist-build.timer`
|
|
1618
1618
|
# atomically repoints at each new release (#1543).
|
|
1619
1619
|
webapp_dist_path: str | None = None
|
|
1620
|
-
# Directory holding the coord
|
|
1621
|
-
#
|
|
1622
|
-
#
|
|
1623
|
-
#
|
|
1624
|
-
#
|
|
1620
|
+
# Directory holding the `coord-web` sources the bundle was built from
|
|
1621
|
+
# (#2470; before epic #2002 split the webapp out into its own repo, this
|
|
1622
|
+
# was `coord/dashboard/webapp/` inside THIS repo). None → `<checkout>/src`
|
|
1623
|
+
# for this machine's `coord-web` checkout, discovered the same way
|
|
1624
|
+
# `coord_web_checkout` is (see
|
|
1625
|
+
# `coord.health.checks.coord_web_ci_pin.resolve_coord_web_checkout`).
|
|
1626
|
+
# Same `src/`-not-root reasoning as `tui_source_dir`: rooting at the
|
|
1627
|
+
# webapp package root would sweep `node_modules`/`dist` were they not
|
|
1628
|
+
# already skipped by name.
|
|
1625
1629
|
webapp_source_dir: str | None = None
|
|
1626
1630
|
# Absolute path to the heartbeat coord-web-dist-build.sh writes on EVERY
|
|
1627
1631
|
# invocation, whether or not there was anything to build (#2122). None →
|
|
@@ -367,7 +367,32 @@ def _has_active_conflict_fix(board: Board, merge_entry_id: str | None) -> bool:
|
|
|
367
367
|
)
|
|
368
368
|
|
|
369
369
|
|
|
370
|
-
def
|
|
370
|
+
def _dispatched_error(assignment: Assignment) -> str | None:
|
|
371
|
+
"""The merge-failure text *assignment*'s briefing was built from.
|
|
372
|
+
|
|
373
|
+
``build_conflict_fix_briefing``/``build_semantic_conflict_briefing``
|
|
374
|
+
both embed the triggering ``QueuedMerge.error`` verbatim (as a
|
|
375
|
+
``"Reason: …"``/``"Last merge error: …"`` line) — that's the only durable
|
|
376
|
+
record of what the merge looked like *at dispatch time*, since
|
|
377
|
+
``on_conflict_fix_done`` clears ``entry.error`` back to ``None`` on
|
|
378
|
+
success before the merge is retried. Returns ``None`` when the briefing
|
|
379
|
+
doesn't carry either marker (e.g. a hand-built test ``Assignment``).
|
|
380
|
+
"""
|
|
381
|
+
briefing = assignment.briefing or ""
|
|
382
|
+
for line in briefing.splitlines():
|
|
383
|
+
if line.startswith("Reason: "):
|
|
384
|
+
return line[len("Reason: "):]
|
|
385
|
+
if line.startswith("Last merge error: "):
|
|
386
|
+
return line[len("Last merge error: "):]
|
|
387
|
+
return None
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
def has_prior_conflict_fix(
|
|
391
|
+
board: Board,
|
|
392
|
+
merge_entry_id: str | None,
|
|
393
|
+
*,
|
|
394
|
+
current_error: str | None = None,
|
|
395
|
+
) -> bool:
|
|
371
396
|
"""True when a second conflict-fix dispatch for *merge_entry_id* is blocked.
|
|
372
397
|
|
|
373
398
|
Blocks when a conflict-fix is **active** (running/pending — don't spawn a
|
|
@@ -379,6 +404,18 @@ def has_prior_conflict_fix(board: Board, merge_entry_id: str | None) -> bool:
|
|
|
379
404
|
followed by a new conflict if other PRs merged in the meantime; that is a
|
|
380
405
|
fresh situation and warrants a fresh fix attempt. Only actual failures
|
|
381
406
|
consume the one-per-entry cap.
|
|
407
|
+
|
|
408
|
+
#2475: that "successful" carve-out assumed a ``done`` conflict-fix always
|
|
409
|
+
resolved *something*. It doesn't when the merge was never blocked by a
|
|
410
|
+
content conflict in the first place (e.g. a permanently-unmergeable
|
|
411
|
+
branch-protection state) — the worker finds nothing to rebase, exits
|
|
412
|
+
``done``, and the merge queue retries into the *identical* failure
|
|
413
|
+
forever (#2009's 38-turn thrash). When *current_error* is given and a
|
|
414
|
+
prior ``done`` conflict-fix's dispatch-time error
|
|
415
|
+
(:func:`_dispatched_error`) matches it exactly, that's the same blocker
|
|
416
|
+
recurring unchanged — not a fresh conflict — so it now consumes the cap
|
|
417
|
+
too. Callers that don't pass *current_error* keep the pre-#2475 behaviour
|
|
418
|
+
(``done`` never blocks) since they have no error text to compare.
|
|
382
419
|
"""
|
|
383
420
|
if merge_entry_id is None:
|
|
384
421
|
return False
|
|
@@ -393,9 +430,16 @@ def has_prior_conflict_fix(board: Board, merge_entry_id: str | None) -> bool:
|
|
|
393
430
|
# Genuine failure — retry cap consumed, surface to human.
|
|
394
431
|
if a.status in ("failed", "advisory"):
|
|
395
432
|
return True
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
433
|
+
if a.status == "done":
|
|
434
|
+
if current_error is not None and _dispatched_error(a) == current_error:
|
|
435
|
+
# Same failure text recurring after a "successful" fix means
|
|
436
|
+
# nothing was actually fixed — treat like a genuine failure.
|
|
437
|
+
return True
|
|
438
|
+
# Otherwise: successful rebase, different (or unknown) situation
|
|
439
|
+
# now → cap not consumed; a re-conflict is new.
|
|
440
|
+
# "cancelled" falls through here too — a cancelled attempt did no
|
|
441
|
+
# work, so it is treated the same as an unrelated "done": re-dispatch
|
|
442
|
+
# is allowed.
|
|
399
443
|
return False
|
|
400
444
|
|
|
401
445
|
|
|
@@ -463,7 +507,10 @@ def dispatch_conflict_fix(
|
|
|
463
507
|
the caller marks the entry ``HUMAN_REQUIRED``. A ``done`` (successful)
|
|
464
508
|
conflict-fix does *not* block a new dispatch — a successful rebase can be
|
|
465
509
|
followed by a fresh conflict if other PRs merged in the meantime, and that
|
|
466
|
-
warrants a new attempt rather than an immediate human escalation (#784)
|
|
510
|
+
warrants a new attempt rather than an immediate human escalation (#784) —
|
|
511
|
+
UNLESS (#2475) *entry.error* is identical to the error the prior ``done``
|
|
512
|
+
attempt was dispatched for, which means the merge failed the same way
|
|
513
|
+
again with nothing actually fixed; see :func:`has_prior_conflict_fix`.
|
|
467
514
|
|
|
468
515
|
``semantic=True`` (#1291) dispatches the escalated second attempt: a
|
|
469
516
|
different, less prescriptive briefing (see
|
|
@@ -481,7 +528,9 @@ def dispatch_conflict_fix(
|
|
|
481
528
|
return None
|
|
482
529
|
if _has_active_conflict_fix(board, entry.assignment_id):
|
|
483
530
|
return None
|
|
484
|
-
elif has_prior_conflict_fix(
|
|
531
|
+
elif has_prior_conflict_fix(
|
|
532
|
+
board, entry.assignment_id, current_error=entry.error,
|
|
533
|
+
):
|
|
485
534
|
return None
|
|
486
535
|
|
|
487
536
|
repo = config.repo(entry.repo_name)
|
{code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-web-dist-build.service
RENAMED
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
#
|
|
5
5
|
# A systemd *user* unit, Type=oneshot, mirroring coord-drive-queue.service's
|
|
6
6
|
# tick pattern (timer-fired, its own flock so a slow run can't stack). Runs
|
|
7
|
-
# deploy/coord-web-dist-build.sh, which:
|
|
7
|
+
# deploy/coord-web-dist-build.sh, which (#2470: tracks the dedicated
|
|
8
|
+
# `coord-web` repo, not `coord/dashboard/webapp/` inside THIS repo — see
|
|
9
|
+
# docs/ADR_COORD_WEB_DIST.md; #2009: that used to be ~/src/code-coordinator,
|
|
10
|
+
# back when the webapp was a subdirectory of this repo):
|
|
8
11
|
# - fetches origin/main into ~/src/coord-web (read-only — only
|
|
9
12
|
# `git fetch` + `rev-parse`, never touches that checkout's working tree
|
|
10
|
-
# or whatever branch an operator has it parked on)
|
|
11
|
-
#
|
|
12
|
-
# subdirectory of this repo,
|
|
13
|
-
# - builds that repo's ROOT at that SHA inside a DEDICATED worktree
|
|
13
|
+
# or whatever branch an operator has it parked on),
|
|
14
|
+
# - builds coord-web's repo root from that SHA inside a DEDICATED worktree
|
|
14
15
|
# (~/.coord-web-checkout, never shared with an operator or `coord drive`),
|
|
15
16
|
# - atomically repoints ~/coord-web-dist at the new build.
|
|
16
17
|
#
|
{code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/deploy/coord-web-dist-build.timer
RENAMED
|
@@ -48,6 +48,18 @@
|
|
|
48
48
|
# overlap the flock, in which case the next fire simply retries 10 minutes
|
|
49
49
|
# later.
|
|
50
50
|
#
|
|
51
|
+
# #2470: this unit now tracks the dedicated `coord-web` repo's `main`
|
|
52
|
+
# (deploy/coord-web-dist-build.sh's BASE_CHECKOUT/WEBAPP_CHECKOUT), not
|
|
53
|
+
# `coord/dashboard/webapp/` inside THIS repo (docs/ADR_COORD_WEB_DIST.md).
|
|
54
|
+
# The cadence measurement above predates that split and was taken against
|
|
55
|
+
# this repo's merge history; it stays the right order-of-magnitude
|
|
56
|
+
# justification for 10 minutes because `coord-web`, being a repo dedicated
|
|
57
|
+
# entirely to the webapp, has EVERY merge to its `main` in-scope for a build
|
|
58
|
+
# — there is no "does this commit touch webapp/ at all" filtering to do
|
|
59
|
+
# anymore (the script never filtered by path either; it always rebuilt on
|
|
60
|
+
# any `origin/main` SHA change, webapp-only or not — this just makes that
|
|
61
|
+
# now-trivially-true for the repo it targets).
|
|
62
|
+
#
|
|
51
63
|
# Install: see deploy/coord-web-dist-build.sh's header, or
|
|
52
64
|
# docs/PHONE_WEBAPP.md / docs/AGENT_OPERATIONS.md.
|
|
53
65
|
|
{code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/deploy_lane_facts.py
RENAMED
|
@@ -38,10 +38,14 @@ wheel's version the way ``agent_venv``/``spawned_coord`` are —
|
|
|
38
38
|
``~/.coord-venv`` release cadence, so "is it on the released version?" is
|
|
39
39
|
not a well-formed question for it. What *is* well-formed, and what this
|
|
40
40
|
checks — mirroring ``tui_binary`` exactly — is whether the live bundle is
|
|
41
|
-
older than the
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
:func:`resolve_webapp_source_dir
|
|
41
|
+
older than the source tree it claims to have been built from: the
|
|
42
|
+
`coord-web` repo's own checkout (#2470; retargeted from this repo's now-gone
|
|
43
|
+
``coord/dashboard/webapp/`` once the webapp moved out under epic #2002 —
|
|
44
|
+
see :func:`resolve_webapp_source_dir`, which shares its checkout-discovery
|
|
45
|
+
convention with ``coord.health.checks.coord_web_ci_pin`` so the two checks
|
|
46
|
+
can never disagree about which local checkout *is* `coord-web`, with a
|
|
47
|
+
fallback to the pre-#2009 in-repo layout for a checkout still parked on a
|
|
48
|
+
pre-split commit).
|
|
45
49
|
"""
|
|
46
50
|
|
|
47
51
|
from __future__ import annotations
|
|
@@ -50,6 +54,7 @@ import subprocess
|
|
|
50
54
|
|
|
51
55
|
from coord.dist_name import CANDIDATE_NAMES
|
|
52
56
|
from coord.health.checks.agent_install import pip_show
|
|
57
|
+
from coord.health.checks.coord_web_ci_pin import resolve_coord_web_checkout
|
|
53
58
|
from coord.health.models import CheckResult, HealthContext, Severity
|
|
54
59
|
from coord.health.registry import check
|
|
55
60
|
from coord.health.units import expand, shorten_path
|
|
@@ -142,31 +147,30 @@ def resolve_webapp_build_heartbeat_path(ctx: HealthContext):
|
|
|
142
147
|
def resolve_webapp_source_dir(ctx: HealthContext):
|
|
143
148
|
"""The webapp source tree in the first local checkout that has one.
|
|
144
149
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
lane reporting UNKNOWN there would be a regression in signal for no
|
|
160
|
-
gain. It can only ever match a tree that genuinely is webapp source.
|
|
150
|
+
Prefers a `coord-web` checkout (#2470), discovered via
|
|
151
|
+
:func:`coord.health.checks.coord_web_ci_pin.resolve_coord_web_checkout`
|
|
152
|
+
— the same "checkout named ``coord-web``, else one carrying
|
|
153
|
+
``playwright.acceptance.config.ts`` at its root" discovery that check
|
|
154
|
+
already uses — so `webapp_bundle` and `coord_web_ci_pin` can never
|
|
155
|
+
disagree about which local checkout is `coord-web`. That checkout's
|
|
156
|
+
``src/`` is the webapp root (#2009, epic #2002).
|
|
157
|
+
|
|
158
|
+
Falls back to ``<checkout>/coord/dashboard/webapp/src`` — the pre-#2009
|
|
159
|
+
in-repo layout. Kept because a machine can legitimately still have an
|
|
160
|
+
older ``claude-coordinator`` checkout parked on a pre-split commit, and
|
|
161
|
+
this lane reporting UNKNOWN there would be a regression in signal for no
|
|
162
|
+
gain. Configured ``health.webapp_source_dir`` still wins outright, same
|
|
163
|
+
convention as every other path in this module.
|
|
161
164
|
"""
|
|
162
165
|
configured = getattr(ctx.thresholds, "webapp_source_dir", None)
|
|
163
166
|
if configured:
|
|
164
167
|
return expand(configured, ctx.home)
|
|
168
|
+
checkout = resolve_coord_web_checkout(ctx)
|
|
169
|
+
if checkout is not None:
|
|
170
|
+
candidate = checkout / "src"
|
|
171
|
+
if candidate.is_dir():
|
|
172
|
+
return candidate
|
|
165
173
|
for checkout in ctx.checkouts:
|
|
166
|
-
if (checkout.path / "package.json").is_file():
|
|
167
|
-
candidate = checkout.path / "src"
|
|
168
|
-
if candidate.is_dir():
|
|
169
|
-
return candidate
|
|
170
174
|
candidate = checkout.path / "coord" / "dashboard" / "webapp" / "src"
|
|
171
175
|
if candidate.is_dir():
|
|
172
176
|
return candidate
|
{code_coordinator-0.5.185 → code_coordinator-0.5.187}/coord/health/checks/fleet_deploy_lanes.py
RENAMED
|
@@ -351,8 +351,8 @@ def probe_tui_binary(ctx: HealthContext) -> CheckResult:
|
|
|
351
351
|
order=13,
|
|
352
352
|
description=(
|
|
353
353
|
"The dist/ bundle `coord web --dist` serves is not older than the "
|
|
354
|
-
"coord
|
|
355
|
-
"on every machine that has one (#1834 lane 5)."
|
|
354
|
+
"`coord-web` source tree it was supposedly built from, "
|
|
355
|
+
"on every machine that has one (#1834 lane 5, #2470)."
|
|
356
356
|
),
|
|
357
357
|
)
|
|
358
358
|
def probe_webapp_bundle(ctx: HealthContext) -> CheckResult:
|
|
@@ -93,6 +93,18 @@ _HUMAN_SIGNALS = (
|
|
|
93
93
|
"permission",
|
|
94
94
|
"protected branch",
|
|
95
95
|
"branch protection",
|
|
96
|
+
# #2475: GitHub's wording when a required status check can never report
|
|
97
|
+
# — e.g. its source CI job was deleted from the workflow while the
|
|
98
|
+
# check was still required in branch protection. This is a *permanent*
|
|
99
|
+
# block; no rebase or content change fixes it. The full message is
|
|
100
|
+
# something like "Pull request X is not mergeable: the base branch
|
|
101
|
+
# policy prohibits the merge.", which also contains "not mergeable" —
|
|
102
|
+
# a _REBASEABLE_SIGNALS entry — so without this specific phrase here,
|
|
103
|
+
# classify_conflict fell through past _HUMAN_SIGNALS (no match) to
|
|
104
|
+
# _REBASEABLE_SIGNALS's generic "not mergeable" match and misclassified
|
|
105
|
+
# the failure as "rebaseable", dispatching a conflict-fix worker that
|
|
106
|
+
# could never succeed (#2009's 38-turn thrash).
|
|
107
|
+
"policy prohibits the merge",
|
|
96
108
|
)
|
|
97
109
|
|
|
98
110
|
|
|
@@ -884,7 +884,11 @@ def detect_stalled_pipeline(
|
|
|
884
884
|
elif (
|
|
885
885
|
matching_entry.state == CONFLICT
|
|
886
886
|
and classify_conflict(matching_entry.error) == "rebaseable"
|
|
887
|
-
and not has_prior_conflict_fix(
|
|
887
|
+
and not has_prior_conflict_fix(
|
|
888
|
+
board,
|
|
889
|
+
matching_entry.assignment_id,
|
|
890
|
+
current_error=matching_entry.error,
|
|
891
|
+
)
|
|
888
892
|
):
|
|
889
893
|
# #1478: a rebaseable CONFLICT with no active/failed
|
|
890
894
|
# conflict-fix attempt — the #1474 classify-and-dispatch step
|
|
@@ -1412,7 +1416,9 @@ def dispatch_stalled_pipeline_action(
|
|
|
1412
1416
|
return StalledDispatchAction(
|
|
1413
1417
|
kind="no_action", detail="merge queue entry no longer found",
|
|
1414
1418
|
)
|
|
1415
|
-
if has_prior_conflict_fix(
|
|
1419
|
+
if has_prior_conflict_fix(
|
|
1420
|
+
board, entry.assignment_id, current_error=entry.error,
|
|
1421
|
+
):
|
|
1416
1422
|
return StalledDispatchAction(
|
|
1417
1423
|
kind="skipped_human_required",
|
|
1418
1424
|
detail="conflict-fix already active or its retry cap was already hit",
|
|
@@ -395,7 +395,7 @@ def findings_for_host(host: str, health: dict | None) -> list[Finding]:
|
|
|
395
395
|
)
|
|
396
396
|
)
|
|
397
397
|
|
|
398
|
-
# ── webapp bundle vs coord
|
|
398
|
+
# ── webapp bundle vs coord-web's own source tree (#1834 lane 5, #2470) ─
|
|
399
399
|
# Deliberately not a Lane/version comparison — see release_verify.py's
|
|
400
400
|
# module docstring and coord.health.checks.fleet_deploy_lanes: the
|
|
401
401
|
# bundle is versioned by origin/main's SHA on a continuous publish
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
#
|
|
5
5
|
# A systemd *user* unit, Type=oneshot, mirroring coord-drive-queue.service's
|
|
6
6
|
# tick pattern (timer-fired, its own flock so a slow run can't stack). Runs
|
|
7
|
-
# deploy/coord-web-dist-build.sh, which:
|
|
7
|
+
# deploy/coord-web-dist-build.sh, which (#2470: tracks the dedicated
|
|
8
|
+
# `coord-web` repo, not `coord/dashboard/webapp/` inside THIS repo — see
|
|
9
|
+
# docs/ADR_COORD_WEB_DIST.md; #2009: that used to be ~/src/code-coordinator,
|
|
10
|
+
# back when the webapp was a subdirectory of this repo):
|
|
8
11
|
# - fetches origin/main into ~/src/coord-web (read-only — only
|
|
9
12
|
# `git fetch` + `rev-parse`, never touches that checkout's working tree
|
|
10
|
-
# or whatever branch an operator has it parked on)
|
|
11
|
-
#
|
|
12
|
-
# subdirectory of this repo,
|
|
13
|
-
# - builds that repo's ROOT at that SHA inside a DEDICATED worktree
|
|
13
|
+
# or whatever branch an operator has it parked on),
|
|
14
|
+
# - builds coord-web's repo root from that SHA inside a DEDICATED worktree
|
|
14
15
|
# (~/.coord-web-checkout, never shared with an operator or `coord drive`),
|
|
15
16
|
# - atomically repoints ~/coord-web-dist at the new build.
|
|
16
17
|
#
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
#
|
|
3
|
-
# coord-web-dist-build.sh — build the
|
|
4
|
-
# `main` into a directory `coord web --dist` serves, WITHOUT
|
|
5
|
-
# ~/.coord-venv (#1543
|
|
3
|
+
# coord-web-dist-build.sh — build the React webapp from the `coord-web`
|
|
4
|
+
# repo's merged `main` into a directory `coord web --dist` serves, WITHOUT
|
|
5
|
+
# touching ~/.coord-venv (#1543; retargeted at `coord-web` by #2470 once the
|
|
6
|
+
# webapp moved out of THIS repo into its own, epic #2002 — see
|
|
7
|
+
# docs/ADR_COORD_WEB_DIST.md for the decision. Before #2470 this built
|
|
8
|
+
# `coord/dashboard/webapp` out of a `claude-coordinator` checkout; the
|
|
9
|
+
# mechanism below is otherwise unchanged, only which repo it points at).
|
|
6
10
|
#
|
|
7
11
|
# Why this exists: coord-web, coord-agent and coord-serve all `ExecStart`
|
|
8
12
|
# from the SAME ~/.coord-venv, so "ship a webapp change" used to mean
|
|
9
13
|
# `pip install --upgrade code-coordinator` on that venv — which also
|
|
10
14
|
# upgrades the board daemon and the agent runtime on that host, and
|
|
11
15
|
# `coord agent update` is already known to kill running headless workers
|
|
12
|
-
# (see the #1543 issue body). This script decouples the two: it keeps
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
16
|
+
# (see the #1543 issue body). This script decouples the two: it keeps a
|
|
17
|
+
# DEDICATED clone of the `coord-web` repo (never an operator's own
|
|
18
|
+
# `~/src/coord-web` dev checkout's working tree — same "never the checkout
|
|
19
|
+
# someone else is using" rule this script has always applied to the repo it
|
|
20
|
+
# builds from), builds it from merged main into a fresh, timestamped release
|
|
21
|
+
# directory, and atomically repoints a symlink at it. `coord web --dist
|
|
22
|
+
# ~/coord-web-dist` (see deploy/coord-web.service) always points at that
|
|
23
|
+
# symlink.
|
|
17
24
|
#
|
|
18
25
|
# #2009 (epic #2002) — WHICH repo this builds changed, nothing else did.
|
|
19
26
|
# Until the split, `$BASE_CHECKOUT` was a checkout of *claude-coordinator*
|
|
@@ -28,11 +35,12 @@
|
|
|
28
35
|
# file (#2122) all carry over untouched, because none of them ever depended
|
|
29
36
|
# on which repo the source came from.
|
|
30
37
|
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
# `
|
|
34
|
-
# `$
|
|
35
|
-
#
|
|
38
|
+
# The health check boots a real `coord web --fixture` and needs a board
|
|
39
|
+
# fixture JSON for it — `coord-web` vendored its own copy of the one
|
|
40
|
+
# `e2e/fixtureServer.ts` already uses (post-#2005 split, commit 7e0bf5b), so
|
|
41
|
+
# this reads `$WEBAPP_CHECKOUT/e2e/fixtures/board-pipeline-basic.json` and
|
|
42
|
+
# has no dependency on a claude-coordinator checkout being present. Set
|
|
43
|
+
# `$HEALTH_CHECK_FIXTURE` directly to override.
|
|
36
44
|
#
|
|
37
45
|
# NO RESTART of coord-web is required after the first build. Starlette's
|
|
38
46
|
# StaticFiles/FileResponse re-resolve the directory on every request (see
|
|
@@ -45,14 +53,21 @@
|
|
|
45
53
|
# once, THEN start/enable coord-web.
|
|
46
54
|
#
|
|
47
55
|
# Safe to run unattended on a timer (see coord-web-dist-build.timer): it
|
|
48
|
-
# never touches ~/.coord-venv
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
#
|
|
56
|
+
# never touches ~/.coord-venv or $BASE_CHECKOUT's working tree (only
|
|
57
|
+
# `git fetch`/`rev-parse` run there — the actual build happens in a
|
|
58
|
+
# SEPARATE, DEDICATED `git worktree`, $WEBAPP_CHECKOUT, so it can't collide
|
|
59
|
+
# with whatever branch an operator has $BASE_CHECKOUT parked on — same
|
|
60
|
+
# reasoning as `coord drive`'s worktree isolation), or any running
|
|
61
|
+
# coord-agent/coord-serve/coord-web process. A `flock` guards against
|
|
62
|
+
# overlapping runs; a same-SHA re-run is a fast no-op.
|
|
54
63
|
#
|
|
55
|
-
# Install:
|
|
64
|
+
# Install: $BASE_CHECKOUT (default ~/src/coord-web) must be a real, already-
|
|
65
|
+
# cloned `coord-web` checkout before the first run — this script only
|
|
66
|
+
# fetches/rev-parses/worktrees off it, it never `git clone`s one into
|
|
67
|
+
# existence. Use a checkout dedicated to this deploy lane if the operator
|
|
68
|
+
# also keeps their own `coord-web` dev checkout elsewhere on this box.
|
|
69
|
+
#
|
|
70
|
+
# git clone <coord-web-remote> ~/src/coord-web # one-time, if not already there
|
|
56
71
|
# cp deploy/coord-web-dist-build.sh ~/.local/bin/ # or run in place
|
|
57
72
|
# chmod +x ~/.local/bin/coord-web-dist-build.sh
|
|
58
73
|
# ~/.local/bin/coord-web-dist-build.sh # first build, before
|
|
@@ -116,6 +131,12 @@
|
|
|
116
131
|
|
|
117
132
|
set -uo pipefail
|
|
118
133
|
|
|
134
|
+
# #2470: tracks the `coord-web` repo's main, not this repo's — see the
|
|
135
|
+
# header. $BASE_CHECKOUT is read-only from this script's point of view (only
|
|
136
|
+
# `git fetch`/`rev-parse`/`worktree add` ever touch it, never `checkout`), so
|
|
137
|
+
# an operator's own `coord-web` dev checkout at the default path is safe in
|
|
138
|
+
# principle, but a checkout dedicated to this deploy lane is still the
|
|
139
|
+
# documented install step — see the header's "Install" section.
|
|
119
140
|
SRC_ROOT="${SRC_ROOT:-$HOME/src}"
|
|
120
141
|
# #2009: the webapp's repo, not claude-coordinator's. See the header.
|
|
121
142
|
REPO_NAME="${REPO_NAME:-coord-web}"
|
|
@@ -126,10 +147,6 @@ BRANCH="${BRANCH:-main}"
|
|
|
126
147
|
# hard-coded `coord/dashboard/webapp`, and stays configurable so a future
|
|
127
148
|
# monorepo layout needs an env var rather than an edit here.
|
|
128
149
|
WEBAPP_SUBDIR="${WEBAPP_SUBDIR:-}"
|
|
129
|
-
# claude-coordinator's checkout — needed ONLY for the health-check fixture
|
|
130
|
-
# below, which lives in that repo's tests/fixtures/ and has no coord-web
|
|
131
|
-
# equivalent. Not fetched, not built, not written to.
|
|
132
|
-
COORD_CHECKOUT="${COORD_CHECKOUT:-$SRC_ROOT/code-coordinator}"
|
|
133
150
|
|
|
134
151
|
# A worktree DEDICATED to this script — never the same directory an operator
|
|
135
152
|
# or `coord drive` worktree might be using, and never checked out over a
|
|
@@ -168,9 +185,20 @@ HEALTH_CHECK_PORT="${HEALTH_CHECK_PORT:-18434}"
|
|
|
168
185
|
HEALTH_CHECK_TIMEOUT_SECS="${HEALTH_CHECK_TIMEOUT_SECS:-20}"
|
|
169
186
|
# The reference seeded board (#1538) — deterministic, no DB/fleet/network, so
|
|
170
187
|
# the scratch instance below never touches ~/.coord/coord.db or races the
|
|
171
|
-
# real coord-web/coord-serve/coord-agent processes. Defaults to the
|
|
172
|
-
#
|
|
173
|
-
#
|
|
188
|
+
# real coord-web/coord-serve/coord-agent processes. Defaults to the copy
|
|
189
|
+
# checked into $WEBAPP_CHECKOUT (the `coord-web` SHA being deployed) at
|
|
190
|
+
# `e2e/fixtures/board-pipeline-basic.json` — that is where the fixture
|
|
191
|
+
# actually lives in the `coord-web` repo (`git ls-tree -r --name-only
|
|
192
|
+
# origin/main` has no `tests/` directory at all post-split). NOTE:
|
|
193
|
+
# `coord-web`'s own `playwright.acceptance.config.ts` still has a stale
|
|
194
|
+
# `DEFAULT_FIXTURE` pointing at the old `tests/fixtures/...` path (a
|
|
195
|
+
# leftover `REPO_ROOT` miscalculation from before the repo split — see
|
|
196
|
+
# docs/ADR_COORD_WEB_DIST.md) so do NOT use that config as the source of
|
|
197
|
+
# truth for this path; this comment documents the real, verified location
|
|
198
|
+
# instead (#2470). This is never a claim that the fixture matches the
|
|
199
|
+
# INSTALLED `coord`'s server code, which post-#2002-split is versioned
|
|
200
|
+
# independently (see docs/ADR_COORD_WEB_DIST.md, "Staleness across the
|
|
201
|
+
# split").
|
|
174
202
|
HEALTH_CHECK_FIXTURE="${HEALTH_CHECK_FIXTURE:-}"
|
|
175
203
|
|
|
176
204
|
say() { echo "[$(date -Is)] $*" >&2; }
|
|
@@ -220,9 +248,7 @@ health_check_release() {
|
|
|
220
248
|
return 1
|
|
221
249
|
fi
|
|
222
250
|
|
|
223
|
-
|
|
224
|
-
# the fixture is a coord *board* fixture and never moved to coord-web.
|
|
225
|
-
fixture="${HEALTH_CHECK_FIXTURE:-$COORD_CHECKOUT/tests/fixtures/board-pipeline-basic.json}"
|
|
251
|
+
fixture="${HEALTH_CHECK_FIXTURE:-$WEBAPP_CHECKOUT/e2e/fixtures/board-pipeline-basic.json}"
|
|
226
252
|
if [[ ! -f "$fixture" ]]; then
|
|
227
253
|
say "ERROR: health-check fixture missing: $fixture — cannot health-check $release_dir"
|
|
228
254
|
return 1
|
|
@@ -48,6 +48,18 @@
|
|
|
48
48
|
# overlap the flock, in which case the next fire simply retries 10 minutes
|
|
49
49
|
# later.
|
|
50
50
|
#
|
|
51
|
+
# #2470: this unit now tracks the dedicated `coord-web` repo's `main`
|
|
52
|
+
# (deploy/coord-web-dist-build.sh's BASE_CHECKOUT/WEBAPP_CHECKOUT), not
|
|
53
|
+
# `coord/dashboard/webapp/` inside THIS repo (docs/ADR_COORD_WEB_DIST.md).
|
|
54
|
+
# The cadence measurement above predates that split and was taken against
|
|
55
|
+
# this repo's merge history; it stays the right order-of-magnitude
|
|
56
|
+
# justification for 10 minutes because `coord-web`, being a repo dedicated
|
|
57
|
+
# entirely to the webapp, has EVERY merge to its `main` in-scope for a build
|
|
58
|
+
# — there is no "does this commit touch webapp/ at all" filtering to do
|
|
59
|
+
# anymore (the script never filtered by path either; it always rebuilt on
|
|
60
|
+
# any `origin/main` SHA change, webapp-only or not — this just makes that
|
|
61
|
+
# now-trivially-true for the repo it targets).
|
|
62
|
+
#
|
|
51
63
|
# Install: see deploy/coord-web-dist-build.sh's header, or
|
|
52
64
|
# docs/PHONE_WEBAPP.md / docs/AGENT_OPERATIONS.md.
|
|
53
65
|
|
|
@@ -156,3 +156,14 @@ timer is still alive.
|
|
|
156
156
|
- Options 2 and 3 remain available to revisit if `coord-web` ever needs a
|
|
157
157
|
distribution channel independent of this fleet's own daemon host — no
|
|
158
158
|
requirement in scope today calls for that.
|
|
159
|
+
- Known follow-up, not fixed here: `coord-web`'s own
|
|
160
|
+
`playwright.acceptance.config.ts` computes `DEFAULT_FIXTURE` via a
|
|
161
|
+
`REPO_ROOT = path.resolve(here, '../../..')` climb that predates the
|
|
162
|
+
split, when that config lived three levels down under
|
|
163
|
+
`coord/dashboard/webapp/`. Now that the config lives at the `coord-web`
|
|
164
|
+
repo root, that climb resolves outside the repo entirely, so the default
|
|
165
|
+
points at a path that doesn't exist — the same class of bug #2470 fixed
|
|
166
|
+
in `deploy/coord-web-dist-build.sh`'s health-check fixture default (now
|
|
167
|
+
`$WEBAPP_CHECKOUT/e2e/fixtures/board-pipeline-basic.json`). Will bite
|
|
168
|
+
`coord-web`'s own `npm run test:acceptance` whenever it runs with no
|
|
169
|
+
explicit fixture path arg; needs a fix in the `coord-web` repo, not here.
|
|
@@ -1418,7 +1418,7 @@ Three things follow, and they are why this command is shaped the way it is:
|
|
|
1418
1418
|
| unit files vs the packaged `coord/deploy/**` | each machine's `/health` | `unit_drift` / PATH shadow (#1831, #1927) |
|
|
1419
1419
|
| `~/.coord-cli-venv` | each machine's `/health` | `cli_venv` (#1806) |
|
|
1420
1420
|
| `coord-tui` binary vs `tui/` source | each machine's `/health` | `tui_binary` — until PKG-3/PKG-4 give it a real channel |
|
|
1421
|
-
| `coord web --dist` bundle vs `coord
|
|
1421
|
+
| `coord web --dist` bundle vs `coord-web`'s own source | each machine's `/health` | `webapp_bundle` / `fleet_webapp_bundle` — lane 5, staleness only (see below) |
|
|
1422
1422
|
|
|
1423
1423
|
`.githooks/**` (lane 6 above) is deliberately **not** graded here: its failure
|
|
1424
1424
|
mode is the inverse — it is live everywhere at the next `git fetch`, with no
|
|
@@ -1431,17 +1431,19 @@ row above — deliberately, not by oversight.** Every other lane compares
|
|
|
1431
1431
|
against *the released version*: a pip version string that both an agent venv
|
|
1432
1432
|
and a spawned `coord` can report. The webapp bundle has no such string to
|
|
1433
1433
|
compare against. `deploy/coord-web-dist-build.timer` publishes it
|
|
1434
|
-
continuously off `origin/main`
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1434
|
+
continuously off the `coord-web` repo's `origin/main` SHA (#2470; before
|
|
1435
|
+
that, this repo's own `coord/dashboard/webapp/`, epic #2002), every 10
|
|
1436
|
+
minutes (#2122), **decoupled on purpose** from the `~/.coord-venv` release
|
|
1437
|
+
cadence every other lane rides (#1543) — that decoupling is the entire point
|
|
1438
|
+
of that pipeline, so folding it into the version-skew map above would
|
|
1439
|
+
manufacture permanent, meaningless "skew" between a semver string and a git
|
|
1440
|
+
SHA on every correctly-running fleet, not report a real defect. What
|
|
1441
|
+
`webapp_bundle` (machine-scope) / `fleet_webapp_bundle` (fleet-scope) check
|
|
1442
|
+
instead, on its own terms — the same shape `tui_binary`/`fleet_tui_binary`
|
|
1443
|
+
already use for the locally-built `coord-tui` binary — is whether the live
|
|
1444
|
+
bundle is *stale relative to the `coord-web` source tree it claims to have
|
|
1445
|
+
been built from*, and whether two machines both serving `coord web` agree on
|
|
1446
|
+
which build that is.
|
|
1445
1447
|
A WARN there means "`coord-web-dist-build.timer` has stopped publishing",
|
|
1446
1448
|
which is the failure mode this lane exists to catch; it says nothing about
|
|
1447
1449
|
whether that publish is caught up with the latest tagged release, because
|