code-coordinator 0.5.247__tar.gz → 0.5.250__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.247 → code_coordinator-0.5.250}/PKG-INFO +1 -1
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/agent.py +5 -1
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/github_ops.py +111 -5
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/providers/claude_pty.py +31 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/reports.py +34 -10
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/review.py +8 -36
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reports.py +54 -9
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_review.py +84 -1
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/fixtures.rs +13 -1
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/mod.rs +9 -6
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/.gitignore +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/CLAUDE.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/GOAL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/LICENSE +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/MANIFEST.in +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/README.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/__init__.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/audit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/block_log.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/board_service.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/brain.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/claim.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/cli.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/client.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/comments.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/config.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/dao.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/db.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/deps.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/drive.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/events.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/filelock.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/freshness.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/gates.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/goal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/context.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/models.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/render.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/health/units.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/hooks.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/interactive.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/models.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/network.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/notify.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/openapi.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/parentage.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/plans.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/progress.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/release_window.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/self_health.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/smoke.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/split_work.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/sql.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/state.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/test_author.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/test_report.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/usage.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/install-agent.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/pyproject.toml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/setup.cfg +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/__init__.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/conftest.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_config.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_db.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_events.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_init.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_models.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_network.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_session.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_split.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_state.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/types/generated.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.247 → code_coordinator-0.5.250}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -4918,7 +4918,11 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4918
4918
|
# (coord.providers.claude_pty.ClaudePtyProvider) intentionally keeps
|
|
4919
4919
|
# the default sources so an operator's own `coord init`-configured
|
|
4920
4920
|
# convenience allow-list still applies to a session they're
|
|
4921
|
-
# attached to and watching.
|
|
4921
|
+
# attached to and watching. #2821: that tradeoff also means the PTY
|
|
4922
|
+
# path pays for CLAUDE.md via ambient auto-discovery (~7.7k tok)
|
|
4923
|
+
# instead of the explicit `_claude_md_system_prompt_suffix` embed
|
|
4924
|
+
# below (~5.2k tok) — a deliberately accepted, documented cost; see
|
|
4925
|
+
# the argv comment in ClaudePtyProvider.build_command.
|
|
4922
4926
|
#
|
|
4923
4927
|
# #2462 tried `--bare` here (closes settings + hooks + .mcp.json +
|
|
4924
4928
|
# CLAUDE.md auto-discovery at once, vs. this flag's settings.json-only
|
|
@@ -2313,17 +2313,123 @@ def rerun_workflow_run_failed(repo: str, run_id: str) -> bool:
|
|
|
2313
2313
|
return True
|
|
2314
2314
|
|
|
2315
2315
|
|
|
2316
|
+
def diff_file_paths(diff_text: str) -> list[str]:
|
|
2317
|
+
"""Return every file path touched by *diff_text*, deduped, order-preserving.
|
|
2318
|
+
|
|
2319
|
+
Scans unified-diff file-header lines (``diff --git a/X b/Y``, ``---
|
|
2320
|
+
a/X``, ``+++ b/X``) — cheap, dependency-free (#944 sealing v1) ahead of a
|
|
2321
|
+
real diff parser. Lives here (rather than :mod:`coord.review`, its
|
|
2322
|
+
original home) because :func:`truncate_diff_text` needs it too (#2819)
|
|
2323
|
+
and ``coord.review`` imports :mod:`coord.github_ops`, not the reverse —
|
|
2324
|
+
:mod:`coord.review` re-uses this copy for its own sealed-path /
|
|
2325
|
+
missing-test-coverage checks instead of keeping a second one.
|
|
2326
|
+
"""
|
|
2327
|
+
paths: list[str] = []
|
|
2328
|
+
seen: set[str] = set()
|
|
2329
|
+
for line in diff_text.splitlines():
|
|
2330
|
+
candidates: list[str] = []
|
|
2331
|
+
if line.startswith("diff --git "):
|
|
2332
|
+
for part in line.split()[1:]:
|
|
2333
|
+
if part.startswith("a/") or part.startswith("b/"):
|
|
2334
|
+
candidates.append(part[2:])
|
|
2335
|
+
elif line.startswith("--- a/"):
|
|
2336
|
+
candidates.append(line[len("--- a/"):])
|
|
2337
|
+
elif line.startswith("+++ b/"):
|
|
2338
|
+
candidates.append(line[len("+++ b/"):])
|
|
2339
|
+
for c in candidates:
|
|
2340
|
+
if c not in seen:
|
|
2341
|
+
seen.add(c)
|
|
2342
|
+
paths.append(c)
|
|
2343
|
+
return paths
|
|
2344
|
+
|
|
2345
|
+
|
|
2346
|
+
_DIFF_FILE_BOUNDARY_RE = re.compile(r"^diff --git ", re.MULTILINE)
|
|
2347
|
+
|
|
2348
|
+
|
|
2316
2349
|
def truncate_diff_text(diff: str, max_chars: int = 60000) -> str:
|
|
2317
|
-
"""Truncate *diff* to *max_chars
|
|
2350
|
+
"""Truncate *diff* to at most *max_chars*, cutting on a ``diff --git``
|
|
2351
|
+
file boundary rather than mid-hunk, and naming the files that got cut.
|
|
2318
2352
|
|
|
2319
2353
|
Factored out of :func:`pr_diff` (#1475) so callers that need the full,
|
|
2320
2354
|
untruncated diff for content hashing (``compute_patch_id``) can still
|
|
2321
2355
|
apply the same display truncation to a *separate* copy shown to a human
|
|
2322
2356
|
reviewer or embedded in a briefing, without a second ``gh`` fetch.
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2357
|
+
|
|
2358
|
+
#2819: the original version was a blind character slice — handed the
|
|
2359
|
+
reviewer a diff that stopped mid-hunk, with no indication anything was
|
|
2360
|
+
even cut, on any PR whose diff crossed *max_chars* (61% of a review
|
|
2361
|
+
briefing at the flat 60k default). That's a silent coverage hole in a
|
|
2362
|
+
gate that's supposed to be adversarial. This version instead:
|
|
2363
|
+
|
|
2364
|
+
1. Cuts at the last ``diff --git`` boundary that fits within
|
|
2365
|
+
*max_chars* — every file kept in the output is complete, never a
|
|
2366
|
+
partial hunk.
|
|
2367
|
+
2. Appends the paths of every file that got dropped, so the reviewer
|
|
2368
|
+
knows exactly what it did not see and can inspect those files
|
|
2369
|
+
directly (e.g. ``git show``) instead of silently missing them.
|
|
2370
|
+
|
|
2371
|
+
Falls back to the old raw character slice — no boundary preference — when
|
|
2372
|
+
no file boundary fits within *max_chars* at all (a single file's own
|
|
2373
|
+
diff already exceeds the cap, or *diff* isn't a unified diff to begin
|
|
2374
|
+
with). Cutting nothing at that point would just emit an empty string,
|
|
2375
|
+
which is worse than the old behavior. #2819 follow-up: that fallback
|
|
2376
|
+
slice lands *inside* the first file's own diff (the loop below only
|
|
2377
|
+
leaves ``cut_at`` unset when the second file's boundary already exceeds
|
|
2378
|
+
*max_chars*, i.e. before any second file exists in the output) — so
|
|
2379
|
+
that file's header rides into ``head`` looking complete while its body
|
|
2380
|
+
is silently cut mid-hunk. Left unflagged, a reviewer who checks the
|
|
2381
|
+
omitted-files list and finds their file *not* on it would reasonably
|
|
2382
|
+
(and wrongly) conclude it was shown in full. That file is now always
|
|
2383
|
+
called out as truncated, separately from the fully-omitted list.
|
|
2384
|
+
"""
|
|
2385
|
+
if len(diff) <= max_chars:
|
|
2386
|
+
return diff
|
|
2387
|
+
|
|
2388
|
+
boundaries = [m.start() for m in _DIFF_FILE_BOUNDARY_RE.finditer(diff)]
|
|
2389
|
+
cut_at: int | None = None
|
|
2390
|
+
for b in boundaries:
|
|
2391
|
+
if b == 0:
|
|
2392
|
+
continue # the first file's own boundary — cutting here keeps nothing
|
|
2393
|
+
if b > max_chars:
|
|
2394
|
+
break
|
|
2395
|
+
cut_at = b
|
|
2396
|
+
|
|
2397
|
+
if cut_at is None:
|
|
2398
|
+
head = diff[:max_chars]
|
|
2399
|
+
# The cut point falls inside the first file's own diff (see the
|
|
2400
|
+
# docstring above) — flag that file as incomplete rather than
|
|
2401
|
+
# letting it silently pass as "not omitted, so fully shown".
|
|
2402
|
+
all_paths = diff_file_paths(diff)
|
|
2403
|
+
incomplete = all_paths[0] if all_paths else None
|
|
2404
|
+
else:
|
|
2405
|
+
head = diff[:cut_at].rstrip("\n")
|
|
2406
|
+
incomplete = None
|
|
2407
|
+
|
|
2408
|
+
dropped = [p for p in diff_file_paths(diff) if p not in diff_file_paths(head)]
|
|
2409
|
+
|
|
2410
|
+
note = f"\n... [diff truncated at {max_chars} chars"
|
|
2411
|
+
tallies = []
|
|
2412
|
+
if incomplete:
|
|
2413
|
+
tallies.append(f"1 file cut off mid-diff ({incomplete})")
|
|
2414
|
+
if dropped:
|
|
2415
|
+
tallies.append(f"{len(dropped)} file(s) omitted")
|
|
2416
|
+
if tallies:
|
|
2417
|
+
note += "; " + "; ".join(tallies)
|
|
2418
|
+
note += "] ..."
|
|
2419
|
+
if incomplete:
|
|
2420
|
+
note += (
|
|
2421
|
+
f"\nFile truncated mid-diff — the shown portion of `{incomplete}` "
|
|
2422
|
+
"is INCOMPLETE, not fully reviewed above; inspect the rest "
|
|
2423
|
+
f"directly (e.g. `git show <head-sha> -- {incomplete}`) before "
|
|
2424
|
+
"approving."
|
|
2425
|
+
)
|
|
2426
|
+
if dropped:
|
|
2427
|
+
note += (
|
|
2428
|
+
"\nFiles omitted by truncation — NOT reviewed above; inspect "
|
|
2429
|
+
"these directly (e.g. `git show <head-sha> -- <path>`) before "
|
|
2430
|
+
"approving:\n" + "\n".join(f" - {p}" for p in dropped)
|
|
2431
|
+
)
|
|
2432
|
+
return head + note
|
|
2327
2433
|
|
|
2328
2434
|
|
|
2329
2435
|
def pr_diff(repo_github: str, pr_number: int, *, max_chars: int | None = 60000) -> str | None:
|
|
@@ -582,6 +582,37 @@ class ClaudePtyProvider(Provider):
|
|
|
582
582
|
# --allowedTools / --permission-mode are still passed as a safety
|
|
583
583
|
# hedge even though enforcement is unverified in the PTY path
|
|
584
584
|
# (capabilities().enforces_deny_list == False).
|
|
585
|
+
#
|
|
586
|
+
# #2821: also deliberately NO `--setting-sources user` here, and no
|
|
587
|
+
# `_claude_md_system_prompt_suffix` embed — both of which
|
|
588
|
+
# `default_worker_command` (coord/agent.py) DOES use for the `-p`
|
|
589
|
+
# path. That's not an oversight; it was checked and rejected:
|
|
590
|
+
#
|
|
591
|
+
# 1. `--setting-sources user` would exclude the LOCAL settings
|
|
592
|
+
# scope, which is exactly where `coord init` (coord/commands/
|
|
593
|
+
# setup.py) writes the operator's own `.claude/settings.local.json`
|
|
594
|
+
# convenience allow-list (`Bash(coord *)` etc) for the repo
|
|
595
|
+
# they're interactively attached to. Restricting sources here
|
|
596
|
+
# would silently drop that allow-list for a session the operator
|
|
597
|
+
# is watching and expects to behave like their normal `claude`
|
|
598
|
+
# session — see coord/agent.py:~4919's identical tradeoff
|
|
599
|
+
# written up for the `-p` path (which deliberately keeps the
|
|
600
|
+
# default sources reasoning in reverse: it EXCLUDES project/local
|
|
601
|
+
# because a worker must NOT inherit host-local settings).
|
|
602
|
+
# 2. `--bare` would close the CLAUDE.md-ambient-discovery gap
|
|
603
|
+
# without touching settings sources, but it also unconditionally
|
|
604
|
+
# disables OAuth/keychain reads — this fleet authenticates via
|
|
605
|
+
# `claude login`/OAuth, not `ANTHROPIC_API_KEY` (see #2462's
|
|
606
|
+
# emergency revert in coord/agent.py for the fleet-wide outage
|
|
607
|
+
# that caused). Not usable here either.
|
|
608
|
+
#
|
|
609
|
+
# Net effect, measured (#2821): this path pays ~7.7k ambient-
|
|
610
|
+
# discovery tokens for CLAUDE.md vs. ~5.2k for the `-p` path's
|
|
611
|
+
# explicit embed — a known, accepted cost of preserving the
|
|
612
|
+
# operator's own interactive settings on a human-attended session,
|
|
613
|
+
# not an accident. Revisit if Claude Code ever exposes a way to
|
|
614
|
+
# suppress CLAUDE.md auto-discovery independent of settings-sources
|
|
615
|
+
# and `--bare`'s OAuth side effect.
|
|
585
616
|
argv: list[str] = [
|
|
586
617
|
binary,
|
|
587
618
|
"--system-prompt", system_prompt,
|
|
@@ -1762,7 +1762,12 @@ _USAGE_COLUMN_META: dict[str, ColumnMeta] = {
|
|
|
1762
1762
|
"repo": ColumnMeta(id="repo", label="Repo", kind="text", weight=1.5),
|
|
1763
1763
|
"title": ColumnMeta(id="title", label="Title", kind="text", weight=4.0),
|
|
1764
1764
|
"legs": ColumnMeta(id="legs", label="Legs", kind="int", align="right", weight=0.6),
|
|
1765
|
-
|
|
1765
|
+
# #2825: labelled "Raw In", not "Tok In" — sitting next to a full "Tok
|
|
1766
|
+
# Out", "Tok In" reads as its matched pair, and it is not: this is raw
|
|
1767
|
+
# UNCACHED input, ~0.001% of what a `work` leg actually sends (the other
|
|
1768
|
+
# ~98% is `cache_read`, below). The column `id` stays `tokens_in` so no
|
|
1769
|
+
# historical number or saved sort changes.
|
|
1770
|
+
"tokens_in": ColumnMeta(id="tokens_in", label="Raw In", kind="int", align="right"),
|
|
1766
1771
|
"tokens_out": ColumnMeta(id="tokens_out", label="Tok Out", kind="int", align="right"),
|
|
1767
1772
|
# #2786: the column that carries the money — see module comment above.
|
|
1768
1773
|
"cache_read": ColumnMeta(id="cache_read", label="Cache Rd", kind="int", align="right"),
|
|
@@ -2658,12 +2663,24 @@ COMPLETED_COLUMNS = [
|
|
|
2658
2663
|
"title",
|
|
2659
2664
|
"started_at",
|
|
2660
2665
|
"ended_at",
|
|
2661
|
-
# #2472's four
|
|
2662
|
-
#
|
|
2663
|
-
#
|
|
2666
|
+
# #2472's four, plus #2825's `cache_read`. #2472's own five (`repo`
|
|
2667
|
+
# through `ended_at` above) keep the indices they had — the client
|
|
2668
|
+
# addresses columns by INDEX for sorting (`reports_sort_by_column`), so
|
|
2669
|
+
# THAT boundary is never interleaved. `cost_total` shifting from index 8
|
|
2670
|
+
# to 9 here is accepted, not an oversight: it mirrors `usage`'s own
|
|
2671
|
+
# precedent (#2786 inserted `cache_read`/`cache_create`/`turns` ahead of
|
|
2672
|
+
# `cost_captured`/`cost_est`/`cost_total` there too), and grouping token
|
|
2673
|
+
# counts together beats preserving one more index.
|
|
2664
2674
|
"legs",
|
|
2665
2675
|
"tokens_in",
|
|
2666
2676
|
"tokens_out",
|
|
2677
|
+
# #2825: `cache_read` was already on the wire as a row key (see
|
|
2678
|
+
# `_completed_spend`) — ~98% of a `work` leg's input, sitting next to a
|
|
2679
|
+
# `tokens_in` that is ~0.001% of it. Without this column, `Tok Out`
|
|
2680
|
+
# (uncapped) next to `tokens_in` (raw uncached input) reads as "output
|
|
2681
|
+
# dwarfs input", which is backwards by five orders of magnitude. Reuses
|
|
2682
|
+
# `_USAGE_COLUMN_META`'s `cache_read` verbatim.
|
|
2683
|
+
"cache_read",
|
|
2667
2684
|
"cost_total",
|
|
2668
2685
|
]
|
|
2669
2686
|
|
|
@@ -2677,10 +2694,14 @@ COMPLETED_COLUMNS = [
|
|
|
2677
2694
|
# also what `issue-activity` already does, and what `RowIdentity` reads.
|
|
2678
2695
|
#
|
|
2679
2696
|
# #2472's spend columns reuse `_USAGE_COLUMN_META`'s labels/kinds verbatim
|
|
2680
|
-
# (`Legs`, `
|
|
2681
|
-
# an operator reading `completed` and `usage` side by side is
|
|
2682
|
-
# same numbers out of the same rollup, and two spellings of
|
|
2683
|
-
# imply otherwise.
|
|
2697
|
+
# (`Legs`, `Raw In`, `Tok Out`, `Cache Rd`, `Total $`) rather than inventing
|
|
2698
|
+
# near-synonyms: an operator reading `completed` and `usage` side by side is
|
|
2699
|
+
# looking at the same numbers out of the same rollup, and two spellings of
|
|
2700
|
+
# the same column would imply otherwise.
|
|
2701
|
+
#
|
|
2702
|
+
# #2825: `tokens_in` is labelled "Raw In", not "Tok In" — see the comment on
|
|
2703
|
+
# `_USAGE_COLUMN_META["tokens_in"]` for why. Applied here too so the two
|
|
2704
|
+
# reports keep agreeing.
|
|
2684
2705
|
#
|
|
2685
2706
|
# ONE cost column, not `usage`'s `cost_captured`/`cost_est` split. `usage`
|
|
2686
2707
|
# splits because it is the dedicated cost report, where "some legs have no
|
|
@@ -2689,7 +2710,9 @@ COMPLETED_COLUMNS = [
|
|
|
2689
2710
|
# would push `title` off a narrow pane. Both halves still ship as extra ROW
|
|
2690
2711
|
# keys (see `_completed_spend`) — the wire contract allows row keys beyond
|
|
2691
2712
|
# `columns`, so a client that wants the split has it without another column,
|
|
2692
|
-
# and `usage` remains the report to visit for it on screen.
|
|
2713
|
+
# and `usage` remains the report to visit for it on screen. `cache_read` is
|
|
2714
|
+
# the one exception (#2825): it isn't a split of an existing column, it's the
|
|
2715
|
+
# ~98% of input spend that `tokens_in` alone cannot represent.
|
|
2693
2716
|
COMPLETED_COLUMN_META = [
|
|
2694
2717
|
ColumnMeta(id="repo", label="Repo", kind="text"),
|
|
2695
2718
|
ColumnMeta(id="issue", label="Issue", kind="int", align="right"),
|
|
@@ -2697,8 +2720,9 @@ COMPLETED_COLUMN_META = [
|
|
|
2697
2720
|
ColumnMeta(id="started_at", label="Started", kind="timestamp"),
|
|
2698
2721
|
ColumnMeta(id="ended_at", label="Ended", kind="timestamp"),
|
|
2699
2722
|
ColumnMeta(id="legs", label="Legs", kind="int", align="right", weight=0.6),
|
|
2700
|
-
ColumnMeta(id="tokens_in", label="
|
|
2723
|
+
ColumnMeta(id="tokens_in", label="Raw In", kind="int", align="right"),
|
|
2701
2724
|
ColumnMeta(id="tokens_out", label="Tok Out", kind="int", align="right"),
|
|
2725
|
+
ColumnMeta(id="cache_read", label="Cache Rd", kind="int", align="right"),
|
|
2702
2726
|
ColumnMeta(id="cost_total", label="Total $", kind="money", align="right"),
|
|
2703
2727
|
]
|
|
2704
2728
|
|
|
@@ -1242,35 +1242,6 @@ def read_repo_claude_md(repo_path: Path) -> str | None:
|
|
|
1242
1242
|
return None
|
|
1243
1243
|
|
|
1244
1244
|
|
|
1245
|
-
def _diff_file_paths(diff_text: str) -> list[str]:
|
|
1246
|
-
"""Return every file path touched by *diff_text*, deduped, order-preserving.
|
|
1247
|
-
|
|
1248
|
-
Scans unified-diff file-header lines (``diff --git a/X b/Y``, ``---
|
|
1249
|
-
a/X``, ``+++ b/X``) — cheap, dependency-free (#944 sealing v1) ahead of a
|
|
1250
|
-
real diff parser. Shared by :func:`_diff_touched_sealed_paths` (which
|
|
1251
|
-
sealed prefixes) and :func:`_diff_paths_outside_sealed` (which actual
|
|
1252
|
-
paths, #1175 — the test-author/mock-author inverse tamper check needs
|
|
1253
|
-
the offending files, not just which prefixes matched).
|
|
1254
|
-
"""
|
|
1255
|
-
paths: list[str] = []
|
|
1256
|
-
seen: set[str] = set()
|
|
1257
|
-
for line in diff_text.splitlines():
|
|
1258
|
-
candidates: list[str] = []
|
|
1259
|
-
if line.startswith("diff --git "):
|
|
1260
|
-
for part in line.split()[1:]:
|
|
1261
|
-
if part.startswith("a/") or part.startswith("b/"):
|
|
1262
|
-
candidates.append(part[2:])
|
|
1263
|
-
elif line.startswith("--- a/"):
|
|
1264
|
-
candidates.append(line[len("--- a/"):])
|
|
1265
|
-
elif line.startswith("+++ b/"):
|
|
1266
|
-
candidates.append(line[len("+++ b/"):])
|
|
1267
|
-
for c in candidates:
|
|
1268
|
-
if c not in seen:
|
|
1269
|
-
seen.add(c)
|
|
1270
|
-
paths.append(c)
|
|
1271
|
-
return paths
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
1245
|
def _path_is_sealed(path: str, sealed: str) -> bool:
|
|
1275
1246
|
"""Does *path* fall under the sealed entry *sealed*?
|
|
1276
1247
|
|
|
@@ -1294,7 +1265,7 @@ def _diff_touched_sealed_paths(diff_text: str, sealed_paths: list[str]) -> list[
|
|
|
1294
1265
|
easy to test.
|
|
1295
1266
|
"""
|
|
1296
1267
|
touched: set[str] = set()
|
|
1297
|
-
for c in
|
|
1268
|
+
for c in github_ops.diff_file_paths(diff_text):
|
|
1298
1269
|
for sealed in sealed_paths:
|
|
1299
1270
|
if _path_is_sealed(c, sealed):
|
|
1300
1271
|
touched.add(sealed)
|
|
@@ -1312,7 +1283,7 @@ def _diff_paths_outside_sealed(diff_text: str, sealed_paths: list[str]) -> list[
|
|
|
1312
1283
|
the ones inside it.
|
|
1313
1284
|
"""
|
|
1314
1285
|
return sorted(
|
|
1315
|
-
p for p in
|
|
1286
|
+
p for p in github_ops.diff_file_paths(diff_text)
|
|
1316
1287
|
if not any(_path_is_sealed(p, sealed) for sealed in sealed_paths)
|
|
1317
1288
|
)
|
|
1318
1289
|
|
|
@@ -1328,7 +1299,7 @@ def _diff_paths_outside_sealed(diff_text: str, sealed_paths: list[str]) -> list[
|
|
|
1328
1299
|
#
|
|
1329
1300
|
# This is intentionally a coarse, path-only heuristic — no diff semantics, no
|
|
1330
1301
|
# ``claude -p`` call, no LLM judgment, just the same cheap file-path
|
|
1331
|
-
# inspection ``
|
|
1302
|
+
# inspection ``github_ops.diff_file_paths``/``_diff_touched_sealed_paths`` already do
|
|
1332
1303
|
# above. It is a NUDGE, not a gate: callers only ever log it, never act on it
|
|
1333
1304
|
# to change dispatch behavior, so a false positive costs nothing (the
|
|
1334
1305
|
# reviewer remains the sole authority and, per CLAUDE.md, already honors a
|
|
@@ -1395,9 +1366,10 @@ def diff_missing_test_coverage(diff_text: str | None) -> bool:
|
|
|
1395
1366
|
"""#2192: True when *diff_text* touches user-visible source and zero
|
|
1396
1367
|
test files, the pattern behind 18.5% of #2132's blocking reviews.
|
|
1397
1368
|
|
|
1398
|
-
Pure, free, deterministic path inspection — reuses
|
|
1399
|
-
Returns False (never flags)
|
|
1400
|
-
|
|
1369
|
+
Pure, free, deterministic path inspection — reuses
|
|
1370
|
+
:func:`coord.github_ops.diff_file_paths`. Returns False (never flags)
|
|
1371
|
+
when the diff is empty, touches no recognized source file
|
|
1372
|
+
(docs-only/internal-tooling-only diffs — CLAUDE.md's
|
|
1401
1373
|
internal-only exemption), or already includes a test-file change.
|
|
1402
1374
|
|
|
1403
1375
|
The CLAUDE.md exemption is honored only at the granularity a path-only
|
|
@@ -1413,7 +1385,7 @@ def diff_missing_test_coverage(diff_text: str | None) -> bool:
|
|
|
1413
1385
|
"""
|
|
1414
1386
|
if not diff_text or not diff_text.strip():
|
|
1415
1387
|
return False
|
|
1416
|
-
paths =
|
|
1388
|
+
paths = github_ops.diff_file_paths(diff_text)
|
|
1417
1389
|
if not any(_is_user_visible_path(p) for p in paths):
|
|
1418
1390
|
return False
|
|
1419
1391
|
return not any(_is_test_path(p) for p in paths)
|
|
@@ -2635,6 +2635,18 @@ class TestUsageSurfacesCacheReadAndTurns:
|
|
|
2635
2635
|
# (100 + 100 + 800 + 0) / 10 = 100.
|
|
2636
2636
|
assert result.rows[0]["tok_per_turn"] == 100
|
|
2637
2637
|
|
|
2638
|
+
def test_tokens_in_is_labelled_raw_in_not_tok_in(self) -> None:
|
|
2639
|
+
"""#2825: "Tok In" next to a full "Tok Out" reads as a matched pair —
|
|
2640
|
+
it is not one, `tokens_in` is ~0.001% of real input. The column `id`
|
|
2641
|
+
stays `tokens_in` (no historical number or saved sort changes), only
|
|
2642
|
+
the display `label` moves."""
|
|
2643
|
+
from coord.reports import fold_usage
|
|
2644
|
+
|
|
2645
|
+
result = fold_usage(_usage_fixture_rows(), _unbounded_window())
|
|
2646
|
+
meta = {m.id: m for m in result.column_meta}
|
|
2647
|
+
assert meta["tokens_in"].label == "Raw In"
|
|
2648
|
+
assert meta["tokens_out"].label == "Tok Out"
|
|
2649
|
+
|
|
2638
2650
|
def test_totals_row_also_carries_the_new_columns(self) -> None:
|
|
2639
2651
|
from coord.reports import fold_usage
|
|
2640
2652
|
|
|
@@ -4182,7 +4194,10 @@ class TestCompletedFold:
|
|
|
4182
4194
|
"repo", "issue", "title", "started_at", "ended_at",
|
|
4183
4195
|
# #2472's four, APPENDED — the client sorts by column index, so
|
|
4184
4196
|
# #2454's five must keep the indices they had.
|
|
4185
|
-
|
|
4197
|
+
# #2825's `cache_read`, appended after `tokens_out` (before
|
|
4198
|
+
# `cost_total`, which shifts by one index — see the module
|
|
4199
|
+
# comment).
|
|
4200
|
+
"legs", "tokens_in", "tokens_out", "cache_read", "cost_total",
|
|
4186
4201
|
]
|
|
4187
4202
|
assert [m.id for m in result.column_meta] == result.columns
|
|
4188
4203
|
|
|
@@ -4298,6 +4313,33 @@ class TestCompletedSpend:
|
|
|
4298
4313
|
# captured cost so its 1M sonnet input tokens estimate to $3.00.
|
|
4299
4314
|
assert row["cost_total"] == pytest.approx(5.0)
|
|
4300
4315
|
|
|
4316
|
+
def test_cache_read_is_a_declared_column_not_just_a_row_key(self) -> None:
|
|
4317
|
+
"""#2825: `completed` showed a full `Tok Out` next to a `tokens_in`
|
|
4318
|
+
that is ~0.001% of a leg's real input — the raw uncached count sitting
|
|
4319
|
+
alone next to output read as "output dwarfs input", backwards by five
|
|
4320
|
+
orders of magnitude. `cache_read` was already computed into every row
|
|
4321
|
+
by `_usage_metrics`; this only had to become a declared column.
|
|
4322
|
+
"""
|
|
4323
|
+
result = fold_completed(
|
|
4324
|
+
[{"repo_name": "myrepo", "number": 21, "title": "t", "state": "closed"}],
|
|
4325
|
+
[{"repo_name": "myrepo", "issue_number": 21,
|
|
4326
|
+
"dispatched_at": 10.0, "finished_at": 20.0, "model": "sonnet",
|
|
4327
|
+
"input_tokens": 634, "output_tokens": 186_209,
|
|
4328
|
+
"cache_read_tokens": 59_908_777}],
|
|
4329
|
+
[],
|
|
4330
|
+
(C_START, C_END),
|
|
4331
|
+
generated_at=C_END,
|
|
4332
|
+
)
|
|
4333
|
+
assert "cache_read" in result.columns
|
|
4334
|
+
meta = {m.id: m for m in result.column_meta}
|
|
4335
|
+
assert meta["cache_read"].label == "Cache Rd"
|
|
4336
|
+
row = result.rows[0]
|
|
4337
|
+
assert row["tokens_in"] == 634
|
|
4338
|
+
assert row["tokens_out"] == 186_209
|
|
4339
|
+
# The number that actually carries the input volume — orders of
|
|
4340
|
+
# magnitude above `tokens_in`, exactly the #2825 scenario.
|
|
4341
|
+
assert row["cache_read"] == 59_908_777
|
|
4342
|
+
|
|
4301
4343
|
def test_the_captured_estimated_split_ships_as_extra_row_keys(self) -> None:
|
|
4302
4344
|
"""One `Total $` COLUMN, but no information thrown away — a client
|
|
4303
4345
|
that wants `usage`'s split can read it off the row."""
|
|
@@ -4384,7 +4426,7 @@ class TestCompletedSpend:
|
|
|
4384
4426
|
if peer is None:
|
|
4385
4427
|
assert row["legs"] == 0, "only a no-leg issue may be absent from usage"
|
|
4386
4428
|
continue
|
|
4387
|
-
for key in ("legs", "tokens_in", "tokens_out"):
|
|
4429
|
+
for key in ("legs", "tokens_in", "tokens_out", "cache_read"):
|
|
4388
4430
|
assert row[key] == peer[key], f"{row['repo']}#{row['issue']} {key}"
|
|
4389
4431
|
assert row["cost_total"] == pytest.approx(peer["cost_total"])
|
|
4390
4432
|
checked += 1
|
|
@@ -4646,14 +4688,17 @@ class TestCompletedCatalogue:
|
|
|
4646
4688
|
text = result_to_csv(_fold_completed())
|
|
4647
4689
|
# The header row is the `column_meta` LABELS (the shared serializer's
|
|
4648
4690
|
# rule), and the values stay raw epochs — not display strings.
|
|
4649
|
-
# #2472's four labels are `usage`'s
|
|
4650
|
-
# off one export lines up with the
|
|
4651
|
-
|
|
4652
|
-
#
|
|
4691
|
+
# #2472's four labels (plus #2825's `cache_read`) are `usage`'s
|
|
4692
|
+
# verbatim, so a spreadsheet built off one export lines up with the
|
|
4693
|
+
# other. `tokens_in` is labelled "Raw In", not "Tok In" (#2825) — it
|
|
4694
|
+
# is not `Tok Out`'s pair, it's ~0.001% of a leg's real input.
|
|
4695
|
+
assert "Repo,Issue,Title,Started,Ended,Legs,Raw In,Tok Out,Cache Rd,Total $" in text
|
|
4696
|
+
# myrepo#9 merged with no assignment: a real 0/0/0/0/0.0, not five
|
|
4653
4697
|
# empty cells.
|
|
4654
|
-
assert 'myrepo,9,"Merged, still open",,400.0,0,0,0,0.0' in text
|
|
4655
|
-
# myrepo#7's retry: 2 legs, $2.00 captured + $3.00 estimated
|
|
4656
|
-
|
|
4698
|
+
assert 'myrepo,9,"Merged, still open",,400.0,0,0,0,0,0.0' in text
|
|
4699
|
+
# myrepo#7's retry: 2 legs, $2.00 captured + $3.00 estimated, no
|
|
4700
|
+
# cache_read_tokens in the fixture so that column reads 0.
|
|
4701
|
+
assert "myrepo,7,Closed one,100.0,250.0,2,1000010,4,0,5.0" in text
|
|
4657
4702
|
|
|
4658
4703
|
|
|
4659
4704
|
class TestRowIdentity:
|
|
@@ -1062,6 +1062,84 @@ def test_truncate_diff_text_matches_pr_diff_truncation(monkeypatch) -> None:
|
|
|
1062
1062
|
assert via_pr_diff == via_helper
|
|
1063
1063
|
|
|
1064
1064
|
|
|
1065
|
+
def _diff_for(path: str, n_lines: int) -> str:
|
|
1066
|
+
lines = [f"diff --git a/{path} b/{path}", f"--- a/{path}", f"+++ b/{path}"]
|
|
1067
|
+
lines += [f"+line {i}" for i in range(n_lines)]
|
|
1068
|
+
return "\n".join(lines) + "\n"
|
|
1069
|
+
|
|
1070
|
+
|
|
1071
|
+
def test_truncate_diff_text_cuts_on_file_boundary_not_mid_hunk() -> None:
|
|
1072
|
+
"""#2819: truncation must never hand the reviewer a partial hunk — the
|
|
1073
|
+
cut lands on the last `diff --git` boundary that fits, so every file
|
|
1074
|
+
kept in the output is complete."""
|
|
1075
|
+
from coord import github_ops
|
|
1076
|
+
|
|
1077
|
+
diff = _diff_for("a.py", 20) + _diff_for("b.py", 20) + _diff_for("c.py", 2000)
|
|
1078
|
+
out = github_ops.truncate_diff_text(diff, max_chars=1000)
|
|
1079
|
+
|
|
1080
|
+
# Both kept files are present in full (their own last line included);
|
|
1081
|
+
# nothing stops mid-hunk.
|
|
1082
|
+
assert "+line 19\ndiff --git a/b.py" in out
|
|
1083
|
+
assert "+line 19\n... [diff truncated" in out
|
|
1084
|
+
assert "diff --git a/c.py" not in out
|
|
1085
|
+
|
|
1086
|
+
|
|
1087
|
+
def test_truncate_diff_text_lists_omitted_files() -> None:
|
|
1088
|
+
"""#2819: a reviewer handed a truncated diff must be told which files
|
|
1089
|
+
it did not see, so it can inspect them directly instead of silently
|
|
1090
|
+
missing them."""
|
|
1091
|
+
from coord import github_ops
|
|
1092
|
+
|
|
1093
|
+
diff = _diff_for("a.py", 20) + _diff_for("b.py", 20) + _diff_for("c.py", 2000)
|
|
1094
|
+
out = github_ops.truncate_diff_text(diff, max_chars=1000)
|
|
1095
|
+
|
|
1096
|
+
assert "1 file(s) omitted" in out
|
|
1097
|
+
assert "Files omitted by truncation" in out
|
|
1098
|
+
assert " - c.py" in out
|
|
1099
|
+
# Only the dropped file is listed — the kept files aren't flagged as omitted.
|
|
1100
|
+
assert " - a.py" not in out
|
|
1101
|
+
assert " - b.py" not in out
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
def test_truncate_diff_text_falls_back_to_char_slice_when_no_boundary_fits() -> None:
|
|
1105
|
+
"""#2819: when even the first file's own diff exceeds max_chars (or the
|
|
1106
|
+
input has no `diff --git` boundaries at all), fall back to the old raw
|
|
1107
|
+
character slice rather than emitting an empty string."""
|
|
1108
|
+
from coord import github_ops
|
|
1109
|
+
|
|
1110
|
+
diff = _diff_for("huge.py", 5000)
|
|
1111
|
+
out = github_ops.truncate_diff_text(diff, max_chars=1000)
|
|
1112
|
+
|
|
1113
|
+
assert len(out) > 1000 # head (1000 chars) + trailing note
|
|
1114
|
+
assert out.startswith(diff[:1000])
|
|
1115
|
+
assert "omitted" not in out # no boundary found -> no file list to report
|
|
1116
|
+
|
|
1117
|
+
|
|
1118
|
+
def test_truncate_diff_text_flags_huge_first_file_as_incomplete() -> None:
|
|
1119
|
+
"""#2819 follow-up: when the *first* file's own diff already exceeds
|
|
1120
|
+
max_chars, the char-slice fallback used to let it ride into `head`
|
|
1121
|
+
looking complete (its header made it in, so it never appeared on the
|
|
1122
|
+
"omitted" list) while its body was silently cut mid-hunk. A reviewer
|
|
1123
|
+
trusting the omitted-files list would wrongly conclude the huge first
|
|
1124
|
+
file was shown in full. It must now be called out explicitly, distinct
|
|
1125
|
+
from files that were dropped entirely."""
|
|
1126
|
+
from coord import github_ops
|
|
1127
|
+
|
|
1128
|
+
diff = _diff_for("huge.py", 5000) + _diff_for("small.py", 5)
|
|
1129
|
+
out = github_ops.truncate_diff_text(diff, max_chars=1000)
|
|
1130
|
+
|
|
1131
|
+
# The huge first file is cut off mid-hunk, not omitted entirely — it
|
|
1132
|
+
# must be flagged as incomplete rather than silently passing review.
|
|
1133
|
+
assert "huge.py" in out
|
|
1134
|
+
assert "cut off mid-diff" in out
|
|
1135
|
+
assert "INCOMPLETE" in out
|
|
1136
|
+
# The trailing file is genuinely never shown at all — still on the
|
|
1137
|
+
# separate "omitted" list.
|
|
1138
|
+
assert "1 file(s) omitted" in out
|
|
1139
|
+
assert "Files omitted by truncation" in out
|
|
1140
|
+
assert " - small.py" in out
|
|
1141
|
+
|
|
1142
|
+
|
|
1065
1143
|
def test_pr_diff_returns_none_on_gh_error(monkeypatch) -> None:
|
|
1066
1144
|
"""#612: pr_diff is best-effort — a gh failure yields None, not a raise."""
|
|
1067
1145
|
from coord import github_ops
|
|
@@ -1928,7 +2006,12 @@ def test_dispatch_review_patch_id_hashes_untruncated_diff(
|
|
|
1928
2006
|
# display-truncated copy, so a huge diff still can't blow the briefing.
|
|
1929
2007
|
assert client.calls, "expected a dispatch POST"
|
|
1930
2008
|
_, payload = client.calls[0]
|
|
1931
|
-
|
|
2009
|
+
# #2819 follow-up: f.py is the *only* file and it alone exceeds the cap,
|
|
2010
|
+
# so the char-slice fallback fires and the note now also flags f.py
|
|
2011
|
+
# itself as cut off mid-diff (not just "truncated at N chars") — the
|
|
2012
|
+
# exact fix this test's own issue asked for.
|
|
2013
|
+
assert "[diff truncated at 60000 chars" in payload["briefing"]
|
|
2014
|
+
assert "cut off mid-diff (f.py)" in payload["briefing"]
|
|
1932
2015
|
assert len(payload["briefing"]) < len(big_diff)
|
|
1933
2016
|
|
|
1934
2017
|
|
|
@@ -141,7 +141,19 @@ pub fn make_test_app(data: BoardData) -> CoordApp {
|
|
|
141
141
|
chat_transcript_cache_key: None,
|
|
142
142
|
chat_last_activity: None,
|
|
143
143
|
chat_spinner_throttle: 0,
|
|
144
|
-
|
|
144
|
+
// #2028: never call the real `read_paused_machines()` from a test
|
|
145
|
+
// fixture — it reads the LOCAL `~/.coord/paused_machines.json`
|
|
146
|
+
// unconditionally (mirrors `workspace` above: no real I/O). Before
|
|
147
|
+
// this, any host whose real pause file was non-empty (e.g. two
|
|
148
|
+
// long-destroyed ephemeral workers left paused on dellserver since
|
|
149
|
+
// 2026-08-04) failed `poll_paused_machines_replaces_snapshot_when_ready`
|
|
150
|
+
// and `..._reverts_an_operator_pause_..` (`app/tests.rs`) purely from
|
|
151
|
+
// ambient machine state — both tests assert `paused_machines.is_empty()`
|
|
152
|
+
// immediately after construction. Empty here matches what every
|
|
153
|
+
// caller of this fixture already expects; a test that wants a
|
|
154
|
+
// pre-populated set assigns `app.paused_machines` directly (see the
|
|
155
|
+
// tests further down this file).
|
|
156
|
+
paused_machines: std::collections::HashSet::new(),
|
|
145
157
|
quiet_paused_machines: std::collections::HashSet::new(),
|
|
146
158
|
cordoned_machines: std::collections::HashSet::new(),
|
|
147
159
|
quiet_hours_windows: std::collections::HashMap::new(),
|
|
@@ -9756,12 +9756,15 @@ fn today_yyyy_mm_dd() -> String {
|
|
|
9756
9756
|
///
|
|
9757
9757
|
/// #1563: on a thin client (board service configured) this file is no
|
|
9758
9758
|
/// longer authoritative — `coord pause` on such a client now writes
|
|
9759
|
-
/// straight to the daemon instead. `CoordApp::new
|
|
9760
|
-
///
|
|
9761
|
-
///
|
|
9762
|
-
///
|
|
9763
|
-
///
|
|
9764
|
-
///
|
|
9759
|
+
/// straight to the daemon instead. `CoordApp::new` still calls this
|
|
9760
|
+
/// directly for the *initial* synchronous `paused_machines` snapshot
|
|
9761
|
+
/// (mirroring `live_tmux_sessions`/`fleet_terminals`/`drive_sessions`
|
|
9762
|
+
/// further up this file, each seeded from a cheap local read before their
|
|
9763
|
+
/// background remote sweep is armed). `app::fixtures::make_test_app`
|
|
9764
|
+
/// deliberately does NOT call this (#2028) — a test fixture must never
|
|
9765
|
+
/// read ambient machine state, so it seeds `paused_machines` empty instead
|
|
9766
|
+
/// and lets individual tests assign it directly. Every *periodic* refresh
|
|
9767
|
+
/// after startup goes through
|
|
9765
9768
|
/// [`data::fetch_paused_machines`] / [`data::spawn_paused_machines_fetch`]
|
|
9766
9769
|
/// instead, which route to the daemon's `GET /pause` when a board service
|
|
9767
9770
|
/// is configured and fall back to this function otherwise — so a
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|