code-coordinator 0.5.207__tar.gz → 0.5.210__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.207 → code_coordinator-0.5.210}/.gitignore +5 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/CLAUDE.md +14 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/PKG-INFO +1 -1
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/confirm_test.py +47 -5
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/dashboard/fixture.py +67 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/dashboard/server.py +269 -1
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_confirm_test.py +107 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_dashboard.py +95 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_dashboard_fixture.py +105 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notify.py +58 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/drive_queue.rs +260 -23
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/tests.rs +34 -14
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/GOAL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/LICENSE +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/MANIFEST.in +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/README.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/__init__.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/agent.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/audit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/block_log.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/board_service.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/brain.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/claim.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/cli.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/client.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/comments.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/config.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/dao.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/db.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/deps.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/drive.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/events.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/filelock.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/freshness.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/gates.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/goal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/context.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/models.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/render.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/health/units.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/hooks.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/interactive.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/models.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/network.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/notify.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/openapi.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/parentage.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/plans.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/progress.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/release_window.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/reports.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/review.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/self_health.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/smoke.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/split_work.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/state.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/test_author.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/test_report.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/usage.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/install-agent.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/pyproject.toml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/setup.cfg +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/__init__.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/conftest.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_config.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_db.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_events.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_init.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_models.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_network.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_review.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_session.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_split.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_state.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.207 → code_coordinator-0.5.210}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -18,3 +18,8 @@ tui/*.out
|
|
|
18
18
|
# tui/cargo-config-local-quadraui.toml.example) — never commit a
|
|
19
19
|
# machine-local co-development override.
|
|
20
20
|
tui/.cargo/config.toml
|
|
21
|
+
|
|
22
|
+
# scratch $HOME created inside disposable worktrees by the CI-mode
|
|
23
|
+
# acceptance runner (scripts/coord-test-runner.sh) — never meant to
|
|
24
|
+
# leave the throwaway worktree, let alone land in git history (#2527).
|
|
25
|
+
.coord-ci-home/
|
|
@@ -10,6 +10,20 @@ CLI tool + per-machine agent server that coordinates Claude Code workers across
|
|
|
10
10
|
> [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
|
|
11
11
|
> Keep it that way: if a new rule does not change what a worker does, it belongs in `docs/`.
|
|
12
12
|
|
|
13
|
+
> **Operator sessions: dispatch, don't do.** If you're the interactive coordinator session —
|
|
14
|
+
> not a dispatched `type=work`/`review` leg — and the user asks for a change in any repo listed
|
|
15
|
+
> in `coordinator.yml`, don't edit that repo's tree yourself: file a GitHub issue and `coord
|
|
16
|
+
> drive-queue add` it. That gets the change tested, independently reviewed, merged, and
|
|
17
|
+
> deployed; hand-editing it here skips all four. (Doc-only edits to *this* repo are the
|
|
18
|
+
> documented exception for *who* does the work — see
|
|
19
|
+
> [`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md) — **not** for *how* it lands: every commit
|
|
20
|
+
> on `main`, doc-only ones included, is squash-merged from a branch's PR, never pushed to `main`
|
|
21
|
+
> directly. Use `EnterWorktree`, branch, commit, push, open the PR, let it merge, then
|
|
22
|
+
> `ExitWorktree`.) Caught 2026-08-21: this exact rule used to live inline here, got moved to
|
|
23
|
+
> that linked doc by #2195, and was then skipped — an operator session hand-implemented a
|
|
24
|
+
> natal-chart feature directly instead of dispatching it. If you're a worker or reviewer leg,
|
|
25
|
+
> this paragraph isn't for you.
|
|
26
|
+
|
|
13
27
|
## Current Goal — read first
|
|
14
28
|
|
|
15
29
|
**[`GOAL.md`](GOAL.md) holds the current north-star objective** — the living, cross-repo / cross-machine goal that should bias all planning, triage, and dispatch. It is meta-level (above any single issue, repo, or session) and changes as priorities evolve: read it first, plan against it, and keep it current. `coordinator.yml` is the source of truth for *topology*; `GOAL.md` is the source of truth for *intent*.
|
|
@@ -82,7 +82,12 @@ saying so:
|
|
|
82
82
|
that lesson is not re-learned here;
|
|
83
83
|
* a timeout (:data:`~coord.revalidate.KIND_TIMEOUT`) — a hung or merely slow
|
|
84
84
|
suite says nothing about the branch. Classifying a timeout as a refutation
|
|
85
|
-
would let a too-tight ceiling fail every branch in the fleet, so it does not
|
|
85
|
+
would let a too-tight ceiling fail every branch in the fleet, so it does not;
|
|
86
|
+
* an external signal killing the confirmation subprocess (:data:`KIND_SIGNAL`,
|
|
87
|
+
#2527) — a negative ``returncode`` from `subprocess.run` (e.g. ``-15`` for
|
|
88
|
+
SIGTERM), most often a `coord-agent`/`coord-serve` restart landing mid-run.
|
|
89
|
+
The command never ran to completion, exactly like a timeout, so it gets the
|
|
90
|
+
identical inconclusive treatment rather than being read as "ran and failed".
|
|
86
91
|
|
|
87
92
|
That asymmetry is the safety property: the worst case of a broken confirmation
|
|
88
93
|
environment is that the Test stage behaves exactly as it did before this module
|
|
@@ -181,6 +186,17 @@ DISABLE_ENV_VAR = "COORD_CONFIRM_TEST_VERDICT"
|
|
|
181
186
|
_FALSEY = frozenset({"0", "false", "no", "off", ""})
|
|
182
187
|
_TRUTHY = frozenset({"1", "true", "yes", "on"})
|
|
183
188
|
|
|
189
|
+
#: #2527: a confirmation subprocess terminated by an external signal (a
|
|
190
|
+
#: coord-agent/coord-serve restart, a manual ``kill``, anything that delivers
|
|
191
|
+
#: a signal rather than letting the command run to completion) — not
|
|
192
|
+
#: :data:`KIND_TIMEOUT` (this module's own deadline) but the same shape from
|
|
193
|
+
#: the branch's point of view: the suite never got a chance to finish, so
|
|
194
|
+
#: nothing was learned about it. `subprocess.run` surfaces this as a negative
|
|
195
|
+
#: ``returncode`` (``-signal.SIGTERM`` == ``-15``) through its normal return
|
|
196
|
+
#: path rather than raising, which is exactly what let it slip past the
|
|
197
|
+
#: existing ``TimeoutExpired`` carve-out and get misread as "ran and failed".
|
|
198
|
+
KIND_SIGNAL = "signal"
|
|
199
|
+
|
|
184
200
|
#: The only kinds that may overturn a PASS claim: a build or test command that
|
|
185
201
|
#: ran to completion and returned nonzero. Nothing weaker. See the module
|
|
186
202
|
#: docstring's fail-direction section — this frozenset IS that safety property.
|
|
@@ -188,7 +204,7 @@ REFUTING_KINDS = frozenset({KIND_BUILD, KIND_SUITE})
|
|
|
188
204
|
|
|
189
205
|
#: Kinds meaning "the check could not reach a verdict". The caller falls back to
|
|
190
206
|
#: the worker's own claim on any of these, which is pre-#2464 behaviour.
|
|
191
|
-
INCONCLUSIVE_KINDS = frozenset({KIND_SETUP, KIND_INFRA, KIND_TIMEOUT})
|
|
207
|
+
INCONCLUSIVE_KINDS = frozenset({KIND_SETUP, KIND_INFRA, KIND_TIMEOUT, KIND_SIGNAL})
|
|
192
208
|
|
|
193
209
|
|
|
194
210
|
# ── Per-pass budget (#2464-review) ──────────────────────────────────────────
|
|
@@ -477,10 +493,35 @@ def _classify_failure(
|
|
|
477
493
|
) -> ConfirmationResult:
|
|
478
494
|
"""Turn a nonzero build/test exit into the right kind.
|
|
479
495
|
|
|
480
|
-
Order matters and mirrors :func:`coord.revalidate.revalidate`:
|
|
481
|
-
(the
|
|
482
|
-
|
|
496
|
+
Order matters and mirrors :func:`coord.revalidate.revalidate`: signal-kill
|
|
497
|
+
first (#2527 — the command never ran to completion at all, so there is
|
|
498
|
+
nothing left to classify), then infra (the suite never ran), then
|
|
499
|
+
baseline-red (it ran, but the branch is not at fault), and only what is
|
|
500
|
+
left over is a genuine refutation.
|
|
483
501
|
"""
|
|
502
|
+
if returncode < 0:
|
|
503
|
+
# #2527: a negative returncode means `subprocess.run` reports the
|
|
504
|
+
# child was killed BY a signal, not that it ran and exited nonzero —
|
|
505
|
+
# e.g. `-15` for SIGTERM from a `coord-agent`/`coord-serve` restart
|
|
506
|
+
# landing mid-confirmation, or a manual `kill`. Same fail-direction
|
|
507
|
+
# as `subprocess.TimeoutExpired` just above this function's callers:
|
|
508
|
+
# a command that never finished says nothing about the branch, so
|
|
509
|
+
# this must stay inconclusive — never `REFUTING_KINDS` — no matter
|
|
510
|
+
# how "nonzero" the raw exit code looks.
|
|
511
|
+
return ConfirmationResult(
|
|
512
|
+
kind=KIND_SIGNAL,
|
|
513
|
+
reason=(
|
|
514
|
+
f"confirmation {stage} command was killed by signal "
|
|
515
|
+
f"{-returncode} (exit {returncode}) rather than running to "
|
|
516
|
+
"completion — like a timeout, a command that never finished "
|
|
517
|
+
"says nothing about the branch, so this is not a refutation "
|
|
518
|
+
"(#2527)"
|
|
519
|
+
),
|
|
520
|
+
output=_tail(output),
|
|
521
|
+
command=command,
|
|
522
|
+
returncode=returncode,
|
|
523
|
+
worktree=worktree,
|
|
524
|
+
)
|
|
484
525
|
infra = is_infrastructure_failure(returncode, output)
|
|
485
526
|
baseline = not infra and is_baseline_red_failure(returncode, output)
|
|
486
527
|
if infra:
|
|
@@ -780,6 +821,7 @@ __all__ = [
|
|
|
780
821
|
"CONFIRM_PASS_BUDGET_SECONDS",
|
|
781
822
|
"DISABLE_ENV_VAR",
|
|
782
823
|
"INCONCLUSIVE_KINDS",
|
|
824
|
+
"KIND_SIGNAL",
|
|
783
825
|
"NOTIFY_BASE_CLIENT_TIMEOUT_SECONDS",
|
|
784
826
|
"REFUTING_KINDS",
|
|
785
827
|
"ConfirmationResult",
|
|
@@ -36,6 +36,8 @@ Fixture schema (every key optional except ``board``)::
|
|
|
36
36
|
"machines": [ {...GET /api/machines entry...} ],
|
|
37
37
|
"sessions": [ {...GET /api/sessions entry...} ],
|
|
38
38
|
"drive_queue": [ {...coord.state._decode_drive_queue_row shape...} ],
|
|
39
|
+
"report_catalogue": {"reports": [ {...coord.reports.ReportDef.to_dict()...} ]},
|
|
40
|
+
"report_results": {"issue-activity": {...coord.reports.ReportResult.to_dict()...}},
|
|
39
41
|
"review_findings": {"rev-1": {"verdict": "approve", "body": "..."}},
|
|
40
42
|
"diffs": {"work-1": "diff --git ..."},
|
|
41
43
|
"chat_reply": "canned /api/chat response text",
|
|
@@ -60,6 +62,7 @@ from __future__ import annotations
|
|
|
60
62
|
|
|
61
63
|
import copy
|
|
62
64
|
import json
|
|
65
|
+
from collections.abc import Mapping
|
|
63
66
|
from dataclasses import MISSING, asdict, dataclass, field, fields
|
|
64
67
|
from pathlib import Path
|
|
65
68
|
from typing import Any
|
|
@@ -156,6 +159,12 @@ class FixtureServer:
|
|
|
156
159
|
machines_raw: list = field(default_factory=list)
|
|
157
160
|
sessions_raw: list = field(default_factory=list)
|
|
158
161
|
drive_queue_raw: list = field(default_factory=list)
|
|
162
|
+
#: #2492 RPT-1: `GET /api/report`'s catalogue. `None` (the default) falls
|
|
163
|
+
#: back to the real `coord.reports.catalogue()` — see `report_catalogue()`.
|
|
164
|
+
report_catalogue_raw: dict | None = None
|
|
165
|
+
#: #2492 RPT-1: seeded `GET /api/report/{id}` results, keyed by report id
|
|
166
|
+
#: — see `report_result()`.
|
|
167
|
+
report_results_raw: dict = field(default_factory=dict)
|
|
159
168
|
review_findings_raw: dict = field(default_factory=dict)
|
|
160
169
|
diffs: dict = field(default_factory=dict)
|
|
161
170
|
chat_reply: str = "fixture mode: the coordinator assistant is not wired up."
|
|
@@ -210,6 +219,51 @@ class FixtureServer:
|
|
|
210
219
|
rows = [r for r in rows if r.get("repo_name") == repo_name]
|
|
211
220
|
return rows
|
|
212
221
|
|
|
222
|
+
def report_catalogue(self) -> dict[str, Any]:
|
|
223
|
+
"""The seeded ``GET /api/report`` catalogue (#2492 RPT-1).
|
|
224
|
+
|
|
225
|
+
Unlike the board/drive-queue, ``coord.reports.catalogue()`` is pure
|
|
226
|
+
in-process metadata (report ids/titles/param definitions) — never a
|
|
227
|
+
DB read — so it is already deterministic without seeding. A fixture
|
|
228
|
+
overrides it only when a test wants a different catalogue than
|
|
229
|
+
production's (e.g. a smaller one for a focused scenario); absent an
|
|
230
|
+
override, this falls back to the real registry so `report_result()`
|
|
231
|
+
below (which validates against seeded results, not the catalogue)
|
|
232
|
+
stays the only place a report fixture is actually required.
|
|
233
|
+
"""
|
|
234
|
+
if self.report_catalogue_raw is not None:
|
|
235
|
+
return copy.deepcopy(self.report_catalogue_raw)
|
|
236
|
+
from coord import reports as _reports # noqa: PLC0415
|
|
237
|
+
|
|
238
|
+
return _reports.catalogue()
|
|
239
|
+
|
|
240
|
+
def report_result(
|
|
241
|
+
self, report_id: str, params: Mapping[str, Any] | None = None
|
|
242
|
+
) -> dict[str, Any]:
|
|
243
|
+
"""The seeded ``ReportResult``-shaped dict for *report_id* (#2492 RPT-1).
|
|
244
|
+
|
|
245
|
+
Keyed by report id only — one canned result per id, mirroring how
|
|
246
|
+
``diffs`` is one canned string per assignment id rather than
|
|
247
|
+
branching on request details. ``params`` is accepted only for
|
|
248
|
+
signature symmetry with ``coord.reports.run_report(report_id,
|
|
249
|
+
params)``; a fixture that needs a param-sensitive variant seeds a
|
|
250
|
+
distinct fixture file per scenario, same as every other accessor
|
|
251
|
+
here.
|
|
252
|
+
|
|
253
|
+
Raises the real :class:`coord.reports.UnknownReportError` for a
|
|
254
|
+
report id with no seeded result, so ``GET /api/report/{id}`` returns
|
|
255
|
+
the byte-identical 404 shape in fixture and live mode.
|
|
256
|
+
"""
|
|
257
|
+
from coord import reports as _reports # noqa: PLC0415
|
|
258
|
+
|
|
259
|
+
entry = self.report_results_raw.get(report_id)
|
|
260
|
+
if entry is None:
|
|
261
|
+
raise _reports.UnknownReportError(
|
|
262
|
+
f"unknown report {report_id!r} — known reports: "
|
|
263
|
+
f"{', '.join(sorted(self.report_results_raw))}"
|
|
264
|
+
)
|
|
265
|
+
return copy.deepcopy(entry)
|
|
266
|
+
|
|
213
267
|
def review_findings(self, assignment_id: str) -> tuple[str, str] | None:
|
|
214
268
|
"""Stand-in for ``coord.state.load_assignment_review_findings``.
|
|
215
269
|
|
|
@@ -353,6 +407,17 @@ def parse_fixture(raw: Any, *, path: Path | None = None) -> FixtureServer:
|
|
|
353
407
|
if not all(isinstance(v, str) for v in diffs.values()):
|
|
354
408
|
raise FixtureError("fixture 'diffs' values must be strings")
|
|
355
409
|
|
|
410
|
+
report_catalogue_raw = raw.get("report_catalogue")
|
|
411
|
+
if report_catalogue_raw is not None and not isinstance(report_catalogue_raw, dict):
|
|
412
|
+
raise FixtureError(
|
|
413
|
+
"fixture 'report_catalogue' must be a mapping (the GET /api/report response shape)"
|
|
414
|
+
)
|
|
415
|
+
report_results_raw = _as_dict(raw.get("report_results"), "report_results")
|
|
416
|
+
if not all(isinstance(v, dict) for v in report_results_raw.values()):
|
|
417
|
+
raise FixtureError(
|
|
418
|
+
"fixture 'report_results' values must be mappings (ReportResult wire shape)"
|
|
419
|
+
)
|
|
420
|
+
|
|
356
421
|
server = FixtureServer(
|
|
357
422
|
board_payload=board_payload,
|
|
358
423
|
merge_queue_raw=_as_list(raw.get("merge_queue"), "merge_queue"),
|
|
@@ -360,6 +425,8 @@ def parse_fixture(raw: Any, *, path: Path | None = None) -> FixtureServer:
|
|
|
360
425
|
machines_raw=_as_list(raw.get("machines"), "machines"),
|
|
361
426
|
sessions_raw=_as_list(raw.get("sessions"), "sessions"),
|
|
362
427
|
drive_queue_raw=_as_list(raw.get("drive_queue"), "drive_queue"),
|
|
428
|
+
report_catalogue_raw=report_catalogue_raw,
|
|
429
|
+
report_results_raw=report_results_raw,
|
|
363
430
|
review_findings_raw=_as_dict(raw.get("review_findings"), "review_findings"),
|
|
364
431
|
diffs=diffs,
|
|
365
432
|
events=_parse_events(raw.get("events")),
|
|
@@ -15,7 +15,13 @@ from pathlib import Path
|
|
|
15
15
|
import httpx
|
|
16
16
|
from starlette.applications import Starlette
|
|
17
17
|
from starlette.requests import Request
|
|
18
|
-
from starlette.responses import
|
|
18
|
+
from starlette.responses import (
|
|
19
|
+
FileResponse,
|
|
20
|
+
HTMLResponse,
|
|
21
|
+
JSONResponse,
|
|
22
|
+
Response,
|
|
23
|
+
StreamingResponse,
|
|
24
|
+
)
|
|
19
25
|
from starlette.routing import Mount, Route, WebSocketRoute
|
|
20
26
|
from starlette.staticfiles import StaticFiles
|
|
21
27
|
from starlette.websockets import WebSocket, WebSocketDisconnect
|
|
@@ -449,6 +455,119 @@ def openapi_spec() -> dict:
|
|
|
449
455
|
"summary": drive_queue_summary_ref,
|
|
450
456
|
},
|
|
451
457
|
}
|
|
458
|
+
# #2492 RPT-1: the report engine's wire types. `dataclass_schema` walks
|
|
459
|
+
# `coord.reports` dataclasses straight (like `DriveQueueSummary` above)
|
|
460
|
+
# for the ones its generic dataclass -> JSON-Schema walk actually
|
|
461
|
+
# supports (`RowIdentity`/`ColumnMeta`/`ChartSeries` have no `tuple[...]`
|
|
462
|
+
# or `Callable` fields). `ReportParam`/`ReportDef`/`ChartSpec`/
|
|
463
|
+
# `ReportResult` do — `ReportParam.validate`/`ReportDef.run` are
|
|
464
|
+
# deliberately non-wire (excluded from their own `to_dict()`), and
|
|
465
|
+
# `coord/openapi.py:json_schema_for` has no mapping for `Callable` or
|
|
466
|
+
# `tuple[...]` at all (`ChartSpec.series`, `ReportResult.window`,
|
|
467
|
+
# `ReportDef.params`, `ReportParam.choices` are all tuples on the
|
|
468
|
+
# dataclass but lists on the wire) — so those four are hand-built here,
|
|
469
|
+
# matching each type's own `to_dict()` field-for-field, the same way
|
|
470
|
+
# `board_response`/`session_response` below are hand-built rather than
|
|
471
|
+
# derived. Registered as named `components` refs either way (not inlined
|
|
472
|
+
# like `board_response`) because these are reused across both report
|
|
473
|
+
# routes and are what #1550's TS codegen (`scripts/codegen.py`) emits an
|
|
474
|
+
# `interface` for.
|
|
475
|
+
from coord.reports import ChartSeries, ColumnMeta, RowIdentity # noqa: PLC0415 — mirrors serve_app.py's lazy `reports` import
|
|
476
|
+
|
|
477
|
+
row_identity_ref = dataclass_schema(RowIdentity, components)
|
|
478
|
+
column_meta_ref = dataclass_schema(ColumnMeta, components)
|
|
479
|
+
chart_series_ref = dataclass_schema(ChartSeries, components)
|
|
480
|
+
components["ReportParam"] = {
|
|
481
|
+
"type": "object",
|
|
482
|
+
"properties": {
|
|
483
|
+
"id": {"type": "string"},
|
|
484
|
+
"label": {"type": "string"},
|
|
485
|
+
"kind": {"type": "string", "description": "choice|text"},
|
|
486
|
+
"choices": {"type": "array", "items": {"type": "string"}},
|
|
487
|
+
"default": {"type": "string"},
|
|
488
|
+
"help": {"type": "string"},
|
|
489
|
+
"free_form": {
|
|
490
|
+
"type": "boolean",
|
|
491
|
+
"description": "choices are presets, not a whitelist",
|
|
492
|
+
},
|
|
493
|
+
},
|
|
494
|
+
"required": ["id", "label"],
|
|
495
|
+
}
|
|
496
|
+
report_param_ref = {"$ref": "#/components/schemas/ReportParam"}
|
|
497
|
+
components["ReportDef"] = {
|
|
498
|
+
"type": "object",
|
|
499
|
+
"properties": {
|
|
500
|
+
"id": {"type": "string"},
|
|
501
|
+
"title": {"type": "string"},
|
|
502
|
+
"description": {"type": "string"},
|
|
503
|
+
"params": {"type": "array", "items": report_param_ref},
|
|
504
|
+
"row_identity": {**row_identity_ref, "nullable": True},
|
|
505
|
+
},
|
|
506
|
+
"required": ["id", "title", "description", "params"],
|
|
507
|
+
}
|
|
508
|
+
report_def_ref = {"$ref": "#/components/schemas/ReportDef"}
|
|
509
|
+
components["ChartSpec"] = {
|
|
510
|
+
"type": "object",
|
|
511
|
+
"properties": {
|
|
512
|
+
"kind": {
|
|
513
|
+
"type": "string",
|
|
514
|
+
"description": "open vocabulary — bar|line|sparkline today",
|
|
515
|
+
},
|
|
516
|
+
"series": {"type": "array", "items": chart_series_ref},
|
|
517
|
+
"x": {"type": "string", "nullable": True},
|
|
518
|
+
"group_by": {"type": "string", "nullable": True},
|
|
519
|
+
"stacked": {"type": "boolean"},
|
|
520
|
+
"title": {"type": "string"},
|
|
521
|
+
"y_label": {"type": "string"},
|
|
522
|
+
},
|
|
523
|
+
"required": ["kind", "series"],
|
|
524
|
+
}
|
|
525
|
+
chart_spec_ref = {"$ref": "#/components/schemas/ChartSpec"}
|
|
526
|
+
components["ReportResult"] = {
|
|
527
|
+
"type": "object",
|
|
528
|
+
"properties": {
|
|
529
|
+
"report_id": {"type": "string"},
|
|
530
|
+
"generated_at": {"type": "number"},
|
|
531
|
+
"window": {"type": "array", "items": {"type": "number"}},
|
|
532
|
+
"columns": {"type": "array", "items": {"type": "string"}},
|
|
533
|
+
"column_meta": {"type": "array", "items": column_meta_ref},
|
|
534
|
+
"rows": {"type": "array", "items": {"type": "object"}},
|
|
535
|
+
"notes": {"type": "array", "items": {"type": "string"}},
|
|
536
|
+
"totals": {
|
|
537
|
+
"type": "object",
|
|
538
|
+
"nullable": True,
|
|
539
|
+
"description": (
|
|
540
|
+
"#1763: optional grand-total row keyed by the same "
|
|
541
|
+
"column ids as `rows`. `null` for reports with no "
|
|
542
|
+
"meaningful sum."
|
|
543
|
+
),
|
|
544
|
+
},
|
|
545
|
+
"chart": {
|
|
546
|
+
**chart_spec_ref,
|
|
547
|
+
"nullable": True,
|
|
548
|
+
"description": (
|
|
549
|
+
"#2271: optional chart declaration — carries no numbers "
|
|
550
|
+
"of its own, the renderer reads the same `rows` the "
|
|
551
|
+
"table does."
|
|
552
|
+
),
|
|
553
|
+
},
|
|
554
|
+
},
|
|
555
|
+
"required": [
|
|
556
|
+
"report_id",
|
|
557
|
+
"generated_at",
|
|
558
|
+
"window",
|
|
559
|
+
"columns",
|
|
560
|
+
"column_meta",
|
|
561
|
+
"rows",
|
|
562
|
+
"notes",
|
|
563
|
+
],
|
|
564
|
+
}
|
|
565
|
+
report_result_ref = {"$ref": "#/components/schemas/ReportResult"}
|
|
566
|
+
report_catalogue_response = {
|
|
567
|
+
"type": "object",
|
|
568
|
+
"properties": {"reports": {"type": "array", "items": report_def_ref}},
|
|
569
|
+
"required": ["reports"],
|
|
570
|
+
}
|
|
452
571
|
board_response = {
|
|
453
572
|
"type": "object",
|
|
454
573
|
"properties": {
|
|
@@ -580,6 +699,70 @@ def openapi_spec() -> dict:
|
|
|
580
699
|
},
|
|
581
700
|
}
|
|
582
701
|
},
|
|
702
|
+
"/api/report": {
|
|
703
|
+
"get": {
|
|
704
|
+
"summary": (
|
|
705
|
+
"#2492: the report catalogue — ids, titles, descriptions "
|
|
706
|
+
"and full parameter metadata (kind/choices/default), so "
|
|
707
|
+
"a client builds its parameter form from here rather "
|
|
708
|
+
"than hardcoding it"
|
|
709
|
+
),
|
|
710
|
+
"responses": {
|
|
711
|
+
"200": {
|
|
712
|
+
"description": "OK",
|
|
713
|
+
"content": {
|
|
714
|
+
"application/json": {"schema": report_catalogue_response}
|
|
715
|
+
},
|
|
716
|
+
}
|
|
717
|
+
},
|
|
718
|
+
}
|
|
719
|
+
},
|
|
720
|
+
"/api/report/{report_id}": {
|
|
721
|
+
"get": {
|
|
722
|
+
"summary": (
|
|
723
|
+
"#2492: run a report and return its ReportResult. "
|
|
724
|
+
"Read-only — no board write, no reconcile side effect. "
|
|
725
|
+
"Query parameters are the report's own params (see "
|
|
726
|
+
"GET /api/report)"
|
|
727
|
+
),
|
|
728
|
+
"parameters": [
|
|
729
|
+
_dashboard_path_param("report_id", "report id from the catalogue"),
|
|
730
|
+
{
|
|
731
|
+
"name": "format",
|
|
732
|
+
"in": "query",
|
|
733
|
+
"required": False,
|
|
734
|
+
"schema": {"type": "string", "enum": ["json", "csv"]},
|
|
735
|
+
"description": (
|
|
736
|
+
"#1765: response encoding. Absent/`json` returns "
|
|
737
|
+
"the ReportResult unchanged; `csv` returns "
|
|
738
|
+
"text/csv (raw values, `#`-prefixed notes) with "
|
|
739
|
+
"a Content-Disposition filename."
|
|
740
|
+
),
|
|
741
|
+
},
|
|
742
|
+
],
|
|
743
|
+
"responses": {
|
|
744
|
+
"200": {
|
|
745
|
+
"description": "OK",
|
|
746
|
+
"content": {
|
|
747
|
+
"application/json": {"schema": report_result_ref},
|
|
748
|
+
"text/csv": {
|
|
749
|
+
"schema": {"type": "string"},
|
|
750
|
+
"description": (
|
|
751
|
+
"`?format=csv`. Header row labelled from "
|
|
752
|
+
"`column_meta`, one row per `rows` entry "
|
|
753
|
+
"with raw values, `notes` as leading `#` "
|
|
754
|
+
"lines."
|
|
755
|
+
),
|
|
756
|
+
},
|
|
757
|
+
},
|
|
758
|
+
},
|
|
759
|
+
"400": {
|
|
760
|
+
"description": "Unknown parameter / bad parameter value / unknown format"
|
|
761
|
+
},
|
|
762
|
+
"404": {"description": "Unknown report id"},
|
|
763
|
+
},
|
|
764
|
+
}
|
|
765
|
+
},
|
|
583
766
|
"/api/approve": {
|
|
584
767
|
"post": {
|
|
585
768
|
"summary": "Dispatch one or more proposals by id",
|
|
@@ -923,6 +1106,22 @@ def build_app(
|
|
|
923
1106
|
}
|
|
924
1107
|
raise ValueError(f"unknown drive-queue action: {action!r}")
|
|
925
1108
|
|
|
1109
|
+
def _report_catalogue() -> dict:
|
|
1110
|
+
"""The report engine's catalogue — seeded fixture or the real
|
|
1111
|
+
registry (#2492).
|
|
1112
|
+
|
|
1113
|
+
Unlike ``_read_drive_queue()``, there is no daemon-vs-local split to
|
|
1114
|
+
resolve here: ``coord.reports.catalogue()`` is pure in-process
|
|
1115
|
+
metadata (report ids/titles/param definitions), never a DB read, so
|
|
1116
|
+
live mode calls it directly — same as ``coord/serve_app.py``'s own
|
|
1117
|
+
``get_report_catalogue``.
|
|
1118
|
+
"""
|
|
1119
|
+
if _fixture is not None:
|
|
1120
|
+
return _fixture.report_catalogue()
|
|
1121
|
+
from coord import reports as _reports # noqa: PLC0415
|
|
1122
|
+
|
|
1123
|
+
return _reports.catalogue()
|
|
1124
|
+
|
|
926
1125
|
# ── Real-time event bus ────────────────────────────────────────────────
|
|
927
1126
|
event_source = EventSource()
|
|
928
1127
|
|
|
@@ -1395,6 +1594,73 @@ def build_app(
|
|
|
1395
1594
|
)
|
|
1396
1595
|
return JSONResponse({"ok": True})
|
|
1397
1596
|
|
|
1597
|
+
async def api_report_catalogue(request: Request) -> Response: # noqa: ARG001 — Starlette handler signature
|
|
1598
|
+
"""GET /api/report — the report catalogue (#2492).
|
|
1599
|
+
|
|
1600
|
+
Mirrors ``coord/serve_app.py``'s ``get_report_catalogue`` almost
|
|
1601
|
+
verbatim, just routed through ``_report_catalogue()`` — the
|
|
1602
|
+
fixture-vs-live indirection every handler in this file goes through
|
|
1603
|
+
(see ``_read_board()``/``_read_drive_queue()``).
|
|
1604
|
+
"""
|
|
1605
|
+
return JSONResponse(_report_catalogue())
|
|
1606
|
+
|
|
1607
|
+
async def api_report_run(request: Request) -> Response:
|
|
1608
|
+
"""GET /api/report/{report_id}?... — run a report and return its
|
|
1609
|
+
ReportResult (#2492).
|
|
1610
|
+
|
|
1611
|
+
Mirrors ``coord/serve_app.py``'s ``get_report`` almost verbatim:
|
|
1612
|
+
``format`` is popped before param validation (a rendering choice,
|
|
1613
|
+
not a report parameter — #1765), ``UnknownReportError`` -> 404,
|
|
1614
|
+
``ReportError`` -> 400, anything else -> 503. ``run_report`` reads
|
|
1615
|
+
local state directly (audit_log/issues/assignments) same as the
|
|
1616
|
+
daemon does today, so live mode needs no board-daemon proxy either
|
|
1617
|
+
— only fixture mode swaps the source, via
|
|
1618
|
+
``_fixture.report_result()``.
|
|
1619
|
+
"""
|
|
1620
|
+
from starlette.concurrency import run_in_threadpool # noqa: PLC0415
|
|
1621
|
+
|
|
1622
|
+
from coord import reports as _reports # noqa: PLC0415
|
|
1623
|
+
|
|
1624
|
+
report_id = request.path_params["report_id"]
|
|
1625
|
+
params = dict(request.query_params)
|
|
1626
|
+
# #1765: `format` is a *rendering* choice, not a report parameter —
|
|
1627
|
+
# pop it before validation or `resolve_params` rejects it as an
|
|
1628
|
+
# unknown parameter.
|
|
1629
|
+
fmt = (params.pop("format", "") or "json").strip().lower()
|
|
1630
|
+
if fmt not in ("json", "csv"):
|
|
1631
|
+
return JSONResponse(
|
|
1632
|
+
{"error": f"unknown format {fmt!r} — allowed values: json, csv"},
|
|
1633
|
+
status_code=400,
|
|
1634
|
+
)
|
|
1635
|
+
try:
|
|
1636
|
+
if _fixture is not None:
|
|
1637
|
+
result = _fixture.report_result(report_id, params)
|
|
1638
|
+
else:
|
|
1639
|
+
result = await run_in_threadpool(_reports.run_report, report_id, params)
|
|
1640
|
+
except _reports.UnknownReportError as e:
|
|
1641
|
+
return JSONResponse({"error": str(e)}, status_code=404)
|
|
1642
|
+
except _reports.ReportError as e:
|
|
1643
|
+
return JSONResponse({"error": str(e)}, status_code=400)
|
|
1644
|
+
except Exception as e: # noqa: BLE001 — surface a clean 503 rather than a stack trace
|
|
1645
|
+
return JSONResponse(
|
|
1646
|
+
{"error": "report run failed", "detail": str(e)}, status_code=503
|
|
1647
|
+
)
|
|
1648
|
+
if fmt == "csv":
|
|
1649
|
+
# Same serializer the CLI calls, so `coord report run --format
|
|
1650
|
+
# csv` and this route emit identical bytes for identical params.
|
|
1651
|
+
return Response(
|
|
1652
|
+
_reports.result_to_csv(result),
|
|
1653
|
+
media_type="text/csv; charset=utf-8",
|
|
1654
|
+
headers={
|
|
1655
|
+
"Content-Disposition": (
|
|
1656
|
+
f'attachment; filename="{_reports.csv_filename(result)}"'
|
|
1657
|
+
)
|
|
1658
|
+
},
|
|
1659
|
+
)
|
|
1660
|
+
return JSONResponse(
|
|
1661
|
+
result.to_dict() if isinstance(result, _reports.ReportResult) else result
|
|
1662
|
+
)
|
|
1663
|
+
|
|
1398
1664
|
async def api_approve(request: Request) -> JSONResponse:
|
|
1399
1665
|
from coord.dispatch import dispatch, post_briefing, compute_do_not_touch
|
|
1400
1666
|
from coord.state import (
|
|
@@ -2316,6 +2582,8 @@ def build_app(
|
|
|
2316
2582
|
Route("/api/proposals", api_proposals, methods=["GET"]),
|
|
2317
2583
|
Route("/api/drive-queue", api_drive_queue, methods=["GET"]),
|
|
2318
2584
|
Route("/api/drive-queue/action", api_drive_queue_action, methods=["POST"]),
|
|
2585
|
+
Route("/api/report", api_report_catalogue, methods=["GET"]),
|
|
2586
|
+
Route("/api/report/{report_id}", api_report_run, methods=["GET"]),
|
|
2319
2587
|
Route("/api/approve", api_approve, methods=["POST"]),
|
|
2320
2588
|
Route("/api/reject", api_reject, methods=["POST"]),
|
|
2321
2589
|
Route("/api/diff/{id}", api_diff, methods=["GET"]),
|