code-coordinator 0.5.184__tar.gz → 0.5.186__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.184 → code_coordinator-0.5.186}/PKG-INFO +1 -1
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/config.py +9 -5
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-web-dist-build.service +6 -5
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-web-dist-build.timer +12 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/deploy_lane_facts.py +28 -24
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/fleet_deploy_lanes.py +2 -2
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/release_verify.py +1 -1
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/reports.py +170 -5
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web-dist-build.service +6 -5
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web-dist-build.sh +56 -30
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web-dist-build.timer +12 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ADR_COORD_WEB_DIST.md +11 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/AGENT_OPERATIONS.md +14 -12
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/PHONE_WEBAPP.md +14 -10
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_coord_web_dist.py +82 -2
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_deploy_lane_facts.py +66 -18
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reports.py +302 -11
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/reports.rs +105 -4
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/.gitignore +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/CLAUDE.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/GOAL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/LICENSE +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/MANIFEST.in +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/README.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/__init__.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agent.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/audit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/block_log.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/board_service.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/brain.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/claim.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/cli.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/client.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/comments.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dao.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/db.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/deps.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/drive.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/events.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/filelock.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/freshness.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/gates.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/goal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/context.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/models.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/render.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/health/units.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/hooks.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/interactive.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/models.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/network.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/notify.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/openapi.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/parentage.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/plans.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/progress.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/release_window.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/review.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/self_health.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/smoke.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/split_work.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/state.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/test_author.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/test_report.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/usage.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/install-agent.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/pyproject.toml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/setup.cfg +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/__init__.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/conftest.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_db.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_events.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_init.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_models.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_network.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_session.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_split.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_state.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.184 → code_coordinator-0.5.186}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -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 →
|
{code_coordinator-0.5.184 → code_coordinator-0.5.186}/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.184 → code_coordinator-0.5.186}/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.184 → code_coordinator-0.5.186}/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.184 → code_coordinator-0.5.186}/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:
|
|
@@ -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
|
|
@@ -2623,6 +2623,13 @@ COMPLETED_COLUMNS = [
|
|
|
2623
2623
|
"title",
|
|
2624
2624
|
"started_at",
|
|
2625
2625
|
"ended_at",
|
|
2626
|
+
# #2472's four. Appended, never interleaved: the client addresses columns
|
|
2627
|
+
# by INDEX for sorting (`reports_sort_by_column`), so inserting one in the
|
|
2628
|
+
# middle would silently re-point a saved sort at a different column.
|
|
2629
|
+
"legs",
|
|
2630
|
+
"tokens_in",
|
|
2631
|
+
"tokens_out",
|
|
2632
|
+
"cost_total",
|
|
2626
2633
|
]
|
|
2627
2634
|
|
|
2628
2635
|
# One entry per COMPLETED_COLUMNS entry, same order (#1760).
|
|
@@ -2633,14 +2640,109 @@ COMPLETED_COLUMNS = [
|
|
|
2633
2640
|
# server-side report has no such screen context, and its `repo` param
|
|
2634
2641
|
# defaults to *all repos*, so the pair has to be two real columns — which is
|
|
2635
2642
|
# also what `issue-activity` already does, and what `RowIdentity` reads.
|
|
2643
|
+
#
|
|
2644
|
+
# #2472's spend columns reuse `_USAGE_COLUMN_META`'s labels/kinds verbatim
|
|
2645
|
+
# (`Legs`, `Tok In`, `Tok Out`, `Total $`) rather than inventing near-synonyms:
|
|
2646
|
+
# an operator reading `completed` and `usage` side by side is looking at the
|
|
2647
|
+
# same numbers out of the same rollup, and two spellings of "Tok In" would
|
|
2648
|
+
# imply otherwise.
|
|
2649
|
+
#
|
|
2650
|
+
# ONE cost column, not `usage`'s `cost_captured`/`cost_est` split. `usage`
|
|
2651
|
+
# splits because it is the dedicated cost report, where "some legs have no
|
|
2652
|
+
# captured cost, don't silently price at $0" (#1763) is the headline; here the
|
|
2653
|
+
# headline is still the time-range list, and a 5-column table growing to 11
|
|
2654
|
+
# would push `title` off a narrow pane. Both halves still ship as extra ROW
|
|
2655
|
+
# keys (see `_completed_spend`) — the wire contract allows row keys beyond
|
|
2656
|
+
# `columns`, so a client that wants the split has it without another column,
|
|
2657
|
+
# and `usage` remains the report to visit for it on screen.
|
|
2636
2658
|
COMPLETED_COLUMN_META = [
|
|
2637
2659
|
ColumnMeta(id="repo", label="Repo", kind="text"),
|
|
2638
2660
|
ColumnMeta(id="issue", label="Issue", kind="int", align="right"),
|
|
2639
2661
|
ColumnMeta(id="title", label="Title", kind="text", weight=3.0),
|
|
2640
2662
|
ColumnMeta(id="started_at", label="Started", kind="timestamp"),
|
|
2641
2663
|
ColumnMeta(id="ended_at", label="Ended", kind="timestamp"),
|
|
2664
|
+
ColumnMeta(id="legs", label="Legs", kind="int", align="right", weight=0.6),
|
|
2665
|
+
ColumnMeta(id="tokens_in", label="Tok In", kind="int", align="right"),
|
|
2666
|
+
ColumnMeta(id="tokens_out", label="Tok Out", kind="int", align="right"),
|
|
2667
|
+
ColumnMeta(id="cost_total", label="Total $", kind="money", align="right"),
|
|
2642
2668
|
]
|
|
2643
2669
|
|
|
2670
|
+
def _completed_spend(
|
|
2671
|
+
assignment_rows: Sequence[Mapping[str, Any]], pricing: Any
|
|
2672
|
+
) -> dict[tuple[str, int], dict[str, Any]]:
|
|
2673
|
+
"""Per-issue ``legs``/tokens/cost, keyed ``(repo_name, issue_number)``.
|
|
2674
|
+
|
|
2675
|
+
A thin adapter over :func:`coord.usage_rollup.rollup`, **not** a second
|
|
2676
|
+
cost calculator: the pricing rules, the captured-vs-estimated split and
|
|
2677
|
+
the "never silently priced at $0" unknown-model rule all stay in
|
|
2678
|
+
``usage_rollup``, exactly as #1763 requires, and the numbers are shaped by
|
|
2679
|
+
the same :func:`_usage_metrics` that builds a ``usage`` row. ``legs``
|
|
2680
|
+
therefore counts agent SESSIONS (every dispatch attempt and retry), which
|
|
2681
|
+
is what ``GroupRollup.legs`` already means — no new arithmetic here.
|
|
2682
|
+
|
|
2683
|
+
One keying detail worth being explicit about: ``rollup``'s ``IssueKey``
|
|
2684
|
+
books a leg to :func:`~coord.usage_rollup.row_issue_number`, i.e.
|
|
2685
|
+
``for_issue_number`` when the leg carries one (#1553's oracle-loop
|
|
2686
|
+
attribution), while this fold's own ``first_dispatch``/``last_finish`` key
|
|
2687
|
+
on the raw ``issue_number``. That divergence is DELIBERATE: the whole
|
|
2688
|
+
point of #2472 is that ``completed``'s cost for an issue equals what
|
|
2689
|
+
``usage`` reports for the same issue, so the cost columns must use
|
|
2690
|
+
``usage``'s attribution rule. The timestamps keep #2454's, which is a
|
|
2691
|
+
port of ``completed_rows``.
|
|
2692
|
+
"""
|
|
2693
|
+
from coord.usage_rollup import IssueKey, TimeWindow, rollup # noqa: PLC0415
|
|
2694
|
+
|
|
2695
|
+
# THE WINDOW IS UNBOUNDED — the spend figures are the issue's *lifetime*
|
|
2696
|
+
# spend, not spend inside the report's own window.
|
|
2697
|
+
#
|
|
2698
|
+
# `completed`'s `since`/`until` filters on ENDED — "what finished in this
|
|
2699
|
+
# range". An issue's legs routinely ran before that window opened (a 24h
|
|
2700
|
+
# window over an issue dispatched a week ago is the normal case, not the
|
|
2701
|
+
# edge case), so windowing the cost the same way would answer "what did
|
|
2702
|
+
# this issue cost me *today*" under a column an operator reads as "what did
|
|
2703
|
+
# finishing this issue cost me" — and would report a smaller number every
|
|
2704
|
+
# time the window narrowed, for an issue whose true cost never changed.
|
|
2705
|
+
# `usage` is where a windowed spend question belongs; it has a `window`
|
|
2706
|
+
# param and this report does not.
|
|
2707
|
+
#
|
|
2708
|
+
# Consequence worth stating: an unbounded `TimeWindow` still drops a leg
|
|
2709
|
+
# with NEITHER `dispatched_at` NOR `finished_at` (`leg_in_window` needs one
|
|
2710
|
+
# of the two to be in range, and `contains(None)` is False). Such a row is
|
|
2711
|
+
# not a session that ran — it is a row with no evidence it ever started —
|
|
2712
|
+
# and `usage` excludes it on the same rule.
|
|
2713
|
+
result = rollup(
|
|
2714
|
+
[dict(a) for a in assignment_rows],
|
|
2715
|
+
group_by="issue",
|
|
2716
|
+
window=TimeWindow(),
|
|
2717
|
+
pricing=pricing,
|
|
2718
|
+
)
|
|
2719
|
+
spend: dict[tuple[str, int], dict[str, Any]] = {}
|
|
2720
|
+
for key, group in result.groups.items():
|
|
2721
|
+
if not isinstance(key, IssueKey) or not key.repo_name:
|
|
2722
|
+
continue
|
|
2723
|
+
spend[(str(key.repo_name), int(key.issue_number))] = _usage_metrics(group)
|
|
2724
|
+
return spend
|
|
2725
|
+
|
|
2726
|
+
|
|
2727
|
+
#: What a row gets when the rollup saw no legs at all for its issue — a real
|
|
2728
|
+
#: zero, not a missing key. An issue can be closed with no assignment ever
|
|
2729
|
+
#: dispatched against it (closed by hand, or fixed as a drive-by in someone
|
|
2730
|
+
#: else's PR), and that row's honest answer is "0 legs, $0", not a blank cell
|
|
2731
|
+
#: a client would have to guess the meaning of.
|
|
2732
|
+
_COMPLETED_NO_LEGS: dict[str, Any] = {
|
|
2733
|
+
"legs": 0,
|
|
2734
|
+
"tokens_in": 0,
|
|
2735
|
+
"tokens_out": 0,
|
|
2736
|
+
"cost_captured": 0.0,
|
|
2737
|
+
"cost_est": 0.0,
|
|
2738
|
+
"cost_total": 0.0,
|
|
2739
|
+
"tokens_cache_read": 0,
|
|
2740
|
+
"tokens_cache_creation": 0,
|
|
2741
|
+
"duration_secs": 0.0,
|
|
2742
|
+
"open_legs": 0,
|
|
2743
|
+
"unknown_model_legs": 0,
|
|
2744
|
+
}
|
|
2745
|
+
|
|
2644
2746
|
|
|
2645
2747
|
def fold_completed(
|
|
2646
2748
|
issues: Iterable[Mapping[str, Any]],
|
|
@@ -2650,6 +2752,8 @@ def fold_completed(
|
|
|
2650
2752
|
*,
|
|
2651
2753
|
repo: str = "",
|
|
2652
2754
|
generated_at: float | None = None,
|
|
2755
|
+
pricing: Any = None,
|
|
2756
|
+
extra_notes: Sequence[str] = (),
|
|
2653
2757
|
) -> ReportResult:
|
|
2654
2758
|
"""Fold the board's own tables into one row per issue that *finished*
|
|
2655
2759
|
inside ``window``.
|
|
@@ -2658,6 +2762,12 @@ def fold_completed(
|
|
|
2658
2762
|
above is testable without a database (same posture as
|
|
2659
2763
|
:func:`fold_issue_activity`). Rows come back newest-ENDED first, which
|
|
2660
2764
|
is #2405's default order; the client re-sorts by column head-click.
|
|
2765
|
+
|
|
2766
|
+
*pricing* left at ``None`` falls through to ``usage_rollup``'s built-in
|
|
2767
|
+
default rates, which is correct for a unit test and **not** what the
|
|
2768
|
+
runner does — :func:`run_completed` loads ``coordinator.yml`` and passes
|
|
2769
|
+
the real ``pricing:`` block, the same seam :func:`fold_usage` uses and for
|
|
2770
|
+
the same #1763 reason.
|
|
2661
2771
|
"""
|
|
2662
2772
|
start, end = window
|
|
2663
2773
|
generated_at = time.time() if generated_at is None else float(generated_at)
|
|
@@ -2719,6 +2829,8 @@ def fold_completed(
|
|
|
2719
2829
|
if value is not None and value > last_finish.get(key, float("-inf")):
|
|
2720
2830
|
last_finish[key] = value
|
|
2721
2831
|
|
|
2832
|
+
spend = _completed_spend(assignment_rows, pricing)
|
|
2833
|
+
|
|
2722
2834
|
rows: list[dict] = []
|
|
2723
2835
|
no_end_time = 0
|
|
2724
2836
|
for issue in issue_rows:
|
|
@@ -2752,6 +2864,10 @@ def fold_completed(
|
|
|
2752
2864
|
"title": str(issue.get("title") or "") or None,
|
|
2753
2865
|
"started_at": first_dispatch.get(key),
|
|
2754
2866
|
"ended_at": ended,
|
|
2867
|
+
# #2472. `**` copies the pairs into this row's own dict, so
|
|
2868
|
+
# the shared `_COMPLETED_NO_LEGS` constant can never end up
|
|
2869
|
+
# aliased by two zero-leg rows.
|
|
2870
|
+
**spend.get(key, _COMPLETED_NO_LEGS),
|
|
2755
2871
|
}
|
|
2756
2872
|
)
|
|
2757
2873
|
|
|
@@ -2760,7 +2876,7 @@ def fold_completed(
|
|
|
2760
2876
|
# `sort_completed_rows` takes the same precaution for the same reason).
|
|
2761
2877
|
rows.sort(key=lambda r: (-float(r["ended_at"]), r["repo"], r["issue"]))
|
|
2762
2878
|
|
|
2763
|
-
notes: list[str] =
|
|
2879
|
+
notes: list[str] = list(extra_notes)
|
|
2764
2880
|
if no_end_time:
|
|
2765
2881
|
notes.append(
|
|
2766
2882
|
f"{no_end_time} completed issue(s) have no end timestamp (no merged "
|
|
@@ -2774,6 +2890,27 @@ def fold_completed(
|
|
|
2774
2890
|
f"No issue in this board belongs to repo {repo_filter!r} — check the "
|
|
2775
2891
|
"coord-local repo name (the one in coordinator.yml), not the GitHub slug."
|
|
2776
2892
|
)
|
|
2893
|
+
# #1763's rule is "never silently priced at $0", and `cost_total` here is
|
|
2894
|
+
# exactly the number that would go silently short. So it IS noted — but as
|
|
2895
|
+
# ONE aggregate line rather than `fold_usage`'s line-per-issue: this report
|
|
2896
|
+
# is a time-range list that can easily carry a hundred rows, and a hundred
|
|
2897
|
+
# near-identical notes would bury the two above that are about the list
|
|
2898
|
+
# itself. The per-issue breakdown is a question for `usage`, which the note
|
|
2899
|
+
# names.
|
|
2900
|
+
unpriced = sorted(
|
|
2901
|
+
f"{r['repo']}#{r['issue']}" for r in rows if r.get("unknown_model_legs")
|
|
2902
|
+
)
|
|
2903
|
+
if unpriced:
|
|
2904
|
+
shown = ", ".join(unpriced[:5])
|
|
2905
|
+
more = f" (and {len(unpriced) - 5} more)" if len(unpriced) > 5 else ""
|
|
2906
|
+
notes.append(
|
|
2907
|
+
f"{len(unpriced)} issue(s) ran leg(s) on a model with no entry in "
|
|
2908
|
+
f"the loaded `pricing:` config — {shown}{more}. Their tokens are "
|
|
2909
|
+
"counted but that spend is NOT in `Total $` (never silently priced "
|
|
2910
|
+
"at $0), so those rows read LOW. Add a rate for the model to "
|
|
2911
|
+
"coordinator.yml, or run the `usage` report for the per-issue "
|
|
2912
|
+
"breakdown."
|
|
2913
|
+
)
|
|
2777
2914
|
|
|
2778
2915
|
return ReportResult(
|
|
2779
2916
|
report_id="completed",
|
|
@@ -2805,10 +2942,21 @@ def _default_completed_source() -> tuple[list[dict], list[dict], list[dict]]:
|
|
|
2805
2942
|
"SELECT repo_name, number, title, state FROM issues"
|
|
2806
2943
|
).fetchall()
|
|
2807
2944
|
]
|
|
2945
|
+
# #2472 widens this one SELECT rather than adding a second source
|
|
2946
|
+
# function: the spend columns fold out of the SAME assignment rows the
|
|
2947
|
+
# timestamps do, so a second round trip would re-read the same table to
|
|
2948
|
+
# get columns this one could have carried. Everything past
|
|
2949
|
+
# `finished_at` is what `usage_rollup.rollup`/`leg_cost` read — token
|
|
2950
|
+
# counts, the captured `cost_usd`, the `model` its estimate is keyed
|
|
2951
|
+
# by, and `for_issue_number` for #1553's attribution. `type` is NOT
|
|
2952
|
+
# selected: it only feeds `usage`'s per-stage drill-down, which this
|
|
2953
|
+
# report does not emit.
|
|
2808
2954
|
assignments = [
|
|
2809
2955
|
dict(r)
|
|
2810
2956
|
for r in conn.execute(
|
|
2811
|
-
"SELECT repo_name, issue_number,
|
|
2957
|
+
"SELECT repo_name, issue_number, for_issue_number, "
|
|
2958
|
+
"dispatched_at, finished_at, input_tokens, output_tokens, "
|
|
2959
|
+
"cache_read_tokens, cache_creation_tokens, cost_usd, model "
|
|
2812
2960
|
"FROM assignments"
|
|
2813
2961
|
).fetchall()
|
|
2814
2962
|
]
|
|
@@ -2834,9 +2982,10 @@ def run_completed(
|
|
|
2834
2982
|
Sequence[Mapping[str, Any]],
|
|
2835
2983
|
Sequence[Mapping[str, Any]],
|
|
2836
2984
|
]] | None = None,
|
|
2985
|
+
pricing: Any = None,
|
|
2837
2986
|
) -> ReportResult:
|
|
2838
|
-
"""Read the board and fold it. ``now``/``source`` are test
|
|
2839
|
-
(mirrors :func:`run_issue_activity`); the report's own parameters are
|
|
2987
|
+
"""Read the board and fold it. ``now``/``source``/``pricing`` are test
|
|
2988
|
+
seams (mirrors :func:`run_issue_activity`); the report's own parameters are
|
|
2840
2989
|
``since``/``until``/``repo`` — the same three, with the same vocabulary
|
|
2841
2990
|
and the same validators, that ``issue-activity`` uses."""
|
|
2842
2991
|
generated_at = time.time() if now is None else float(now)
|
|
@@ -2844,6 +2993,15 @@ def run_completed(
|
|
|
2844
2993
|
start = end - parse_duration(since)
|
|
2845
2994
|
source_fn = _default_completed_source if source is None else source
|
|
2846
2995
|
issues, assignments, merge_queue = source_fn()
|
|
2996
|
+
|
|
2997
|
+
# Same seam, same reason as `run_usage`: the estimated half of `cost_total`
|
|
2998
|
+
# has to be priced off the fleet's OWN `pricing:` block, and a config that
|
|
2999
|
+
# could not be loaded says so in a note instead of silently falling back
|
|
3000
|
+
# (#1763).
|
|
3001
|
+
extra_notes: list[str] = []
|
|
3002
|
+
if pricing is None:
|
|
3003
|
+
pricing, extra_notes = _load_pricing()
|
|
3004
|
+
|
|
2847
3005
|
return fold_completed(
|
|
2848
3006
|
issues,
|
|
2849
3007
|
assignments,
|
|
@@ -2851,6 +3009,8 @@ def run_completed(
|
|
|
2851
3009
|
(start, end),
|
|
2852
3010
|
repo=repo,
|
|
2853
3011
|
generated_at=generated_at,
|
|
3012
|
+
pricing=pricing,
|
|
3013
|
+
extra_notes=extra_notes,
|
|
2854
3014
|
)
|
|
2855
3015
|
|
|
2856
3016
|
|
|
@@ -2938,7 +3098,12 @@ COMPLETED = ReportDef(
|
|
|
2938
3098
|
"merged (the PR closed it before the brain synced the close). ENDED is "
|
|
2939
3099
|
"the merge timestamp, falling back to the last assignment to finish; "
|
|
2940
3100
|
"STARTED is the first dispatch. Issues with no end timestamp at all "
|
|
2941
|
-
"cannot be placed in a time range and are counted in a note instead."
|
|
3101
|
+
"cannot be placed in a time range and are counted in a note instead. "
|
|
3102
|
+
"Each row also carries what it cost: LEGS is how many agent sessions "
|
|
3103
|
+
"(dispatches and retries) ran against the issue, and the token and "
|
|
3104
|
+
"dollar figures are the issue's WHOLE-LIFE spend — not just the part "
|
|
3105
|
+
"inside this window — so narrowing the range never shrinks them. Use "
|
|
3106
|
+
"the `usage` report for windowed spend or the captured/estimated split."
|
|
2942
3107
|
),
|
|
2943
3108
|
params=(
|
|
2944
3109
|
# The same three params, the same vocabulary and the same validators
|
|
@@ -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
|