code-coordinator 0.5.236__tar.gz → 0.5.238__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.236 → code_coordinator-0.5.238}/PKG-INFO +1 -1
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/code_coordinator.egg-info/SOURCES.txt +2 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/code_coordinator.egg-info/scm_file_list.json +2 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/agent.py +125 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/portal.py +50 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/db.py +102 -10
- code_coordinator-0.5.238/coord/decomposition_chat.py +260 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_portal.py +55 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_db.py +123 -1
- code_coordinator-0.5.238/tests/test_decomposition_chat.py +259 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/approved.rs +227 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/dialogs.rs +207 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/events.rs +21 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/fixtures.rs +1 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/mod.rs +33 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/settings_ui.rs +10 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/sidebar.rs +6 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/tests.rs +21 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/types.rs +8 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/.gitignore +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/CLAUDE.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/GOAL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/LICENSE +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/MANIFEST.in +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/README.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/__init__.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/audit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/block_log.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/board_service.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/brain.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/claim.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/cli.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/client.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/comments.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/config.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/dao.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/deps.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/drive.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/events.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/filelock.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/freshness.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/gates.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/goal.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/context.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/models.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/render.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/health/units.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/hooks.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/interactive.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/models.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/network.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/notify.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/openapi.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/parentage.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/plans.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/progress.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/release_window.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/reports.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/review.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/self_health.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/smoke.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/split_work.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/state.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/test_author.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/test_report.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/usage.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/install-agent.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/pyproject.toml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/setup.cfg +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/__init__.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/conftest.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_config.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_events.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_init.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_models.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_network.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_review.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_session.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_split.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_state.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.236 → code_coordinator-0.5.238}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -62,6 +62,7 @@ coord/conflict_fix.py
|
|
|
62
62
|
coord/dao.py
|
|
63
63
|
coord/db.py
|
|
64
64
|
coord/dead_end.py
|
|
65
|
+
coord/decomposition_chat.py
|
|
65
66
|
coord/deploy_manifest.py
|
|
66
67
|
coord/deploy_units.py
|
|
67
68
|
coord/deps.py
|
|
@@ -478,6 +479,7 @@ tests/test_dashboard_terminal.py
|
|
|
478
479
|
tests/test_dashboard_terminal_live.py
|
|
479
480
|
tests/test_db.py
|
|
480
481
|
tests/test_dead_end.py
|
|
482
|
+
tests/test_decomposition_chat.py
|
|
481
483
|
tests/test_deploy_coord_db_backup.py
|
|
482
484
|
tests/test_deploy_coord_web_dist.py
|
|
483
485
|
tests/test_deploy_coord_web_rollback.py
|
{code_coordinator-0.5.236 → code_coordinator-0.5.238}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
"coord/dashboard/terminal.py",
|
|
92
92
|
"coord/db.py",
|
|
93
93
|
"coord/dead_end.py",
|
|
94
|
+
"coord/decomposition_chat.py",
|
|
94
95
|
"coord/deploy/README.md",
|
|
95
96
|
"coord/deploy/coord-agent.service",
|
|
96
97
|
"coord/deploy/coord-db-backup.service",
|
|
@@ -550,6 +551,7 @@
|
|
|
550
551
|
"tests/test_dashboard_terminal_live.py",
|
|
551
552
|
"tests/test_db.py",
|
|
552
553
|
"tests/test_dead_end.py",
|
|
554
|
+
"tests/test_decomposition_chat.py",
|
|
553
555
|
"tests/test_deploy_coord_db_backup.py",
|
|
554
556
|
"tests/test_deploy_coord_web_dist.py",
|
|
555
557
|
"tests/test_deploy_coord_web_rollback.py",
|
|
@@ -3643,6 +3643,112 @@ MILESTONE_CHAT_DENY_COMMANDS: list[str] = [
|
|
|
3643
3643
|
"Bash(coord assign *)",
|
|
3644
3644
|
]
|
|
3645
3645
|
|
|
3646
|
+
DECOMPOSITION_CHAT_SYSTEM_PROMPT = """\
|
|
3647
|
+
You are a decomposition steward for a customer's APPROVED portal submission \
|
|
3648
|
+
that an operator just pulled into this session from the TUI's "Approved \
|
|
3649
|
+
work items" panel (#2533, ms-67 contract §4). Unlike `milestone-chat` above \
|
|
3650
|
+
(which proposes and waits for confirmation before writing anything), this \
|
|
3651
|
+
session's WHOLE JOB is to actually decompose the submission into real \
|
|
3652
|
+
coordinator work — there is no separate confirm-then-write step here \
|
|
3653
|
+
because pulling the row into this session already IS the operator's \
|
|
3654
|
+
confirmation.
|
|
3655
|
+
|
|
3656
|
+
The first user message carries: the submission's OUTCOME, AUDIENCE, DONE \
|
|
3657
|
+
DEFINITION, and CONSTRAINTS (the four fields the customer described); its \
|
|
3658
|
+
mapped repo(s); and `coordinator.yml` topology context for those repo(s) \
|
|
3659
|
+
(depends_on, which machines claim each repo).
|
|
3660
|
+
|
|
3661
|
+
Your job, in order:
|
|
3662
|
+
1. Decide whether this is ORACLE-LOOP-SHAPED work (docs/ORACLE_LOOP.md) — \
|
|
3663
|
+
big or cross-cutting enough to warrant a Gate-A contract + independent \
|
|
3664
|
+
test-author, or small enough to skip straight to normal dispatch. Discuss \
|
|
3665
|
+
this with the operator if it's not obvious; you don't need to wait for \
|
|
3666
|
+
explicit confirmation before filing, but flag your reasoning.
|
|
3667
|
+
2. Produce one or more GitHub issues describing the work, using:
|
|
3668
|
+
|
|
3669
|
+
coord issue create <repo> --title '<title>' --body '<body>'
|
|
3670
|
+
|
|
3671
|
+
(or `--body-file` for long markdown — never raw `gh issue create`, this \
|
|
3672
|
+
repo's own house rule). If the decomposition is milestone-shaped, file an \
|
|
3673
|
+
epic/tracking issue first (`coord milestone create <repo> --title '<title>'`) \
|
|
3674
|
+
and file the sub-issues, then `coord milestone add-child <repo> <epic> \
|
|
3675
|
+
<issue>` each of them onto it.
|
|
3676
|
+
3. Queue every filed issue via:
|
|
3677
|
+
|
|
3678
|
+
coord drive-queue add <repo> <issue>
|
|
3679
|
+
|
|
3680
|
+
— NEVER `coord assign` or `coord drive --tmux` (this repo's own standing \
|
|
3681
|
+
preference: always go through the drive queue, never ad-hoc dispatch).
|
|
3682
|
+
4. Record the portal link so downstream tooling can find this submission's \
|
|
3683
|
+
work again (2026-08-22 briefing amendment — this is NOT optional):
|
|
3684
|
+
|
|
3685
|
+
coord portal link <repo> <milestone_number> <submission_id>
|
|
3686
|
+
|
|
3687
|
+
Use the SUBMISSION_ID from your first user message and the milestone \
|
|
3688
|
+
number `coord milestone create` printed. If `coord portal link` fails (bad \
|
|
3689
|
+
repo, bad milestone number, daemon-host guard), that is a FAILURE of this \
|
|
3690
|
+
step — say so explicitly to the operator, do not silently move on.
|
|
3691
|
+
|
|
3692
|
+
**If your decomposition produced a single one-off issue with no \
|
|
3693
|
+
milestone/epic** (not a milestone-shaped decomposition): `coord portal \
|
|
3694
|
+
link` has NO non-milestone form today — it requires a `milestone_number`, \
|
|
3695
|
+
which a one-off issue doesn't have. Do NOT invent one or skip the link \
|
|
3696
|
+
silently. Say so explicitly in your final summary to the operator (e.g. \
|
|
3697
|
+
"this submission has no recorded portal link — coord portal link only \
|
|
3698
|
+
covers milestones, and #2533's own dispatcher found no equivalent for a \
|
|
3699
|
+
one-off issue"), so the gap is visible rather than silently lost.
|
|
3700
|
+
|
|
3701
|
+
Rules:
|
|
3702
|
+
- Do NOT run raw `gh issue create`/`gh issue edit`/`gh pr *`/`gh api -X \
|
|
3703
|
+
POST|PATCH|DELETE` or any other mutating `gh` command — the write paths \
|
|
3704
|
+
above (`coord issue create`, `coord milestone create/add-child`, `coord \
|
|
3705
|
+
drive-queue add`, `coord portal link`) are the only ones you may use.
|
|
3706
|
+
- Do NOT run `coord assign <machine> <repo> <issue>` or `coord drive \
|
|
3707
|
+
--tmux` — always `coord drive-queue add`.
|
|
3708
|
+
- Do NOT run `coord approve` or `coord merge` — outside this session's job.
|
|
3709
|
+
- Do NOT run `git push`, `git commit`, or any command that writes to a repo \
|
|
3710
|
+
checkout — this session files issues and queues work, it does not touch code.
|
|
3711
|
+
- Keep the operator informed: summarize your decomposition plan before \
|
|
3712
|
+
filing, and report back what you filed/queued/linked (and any link gap) \
|
|
3713
|
+
when done.\
|
|
3714
|
+
"""
|
|
3715
|
+
|
|
3716
|
+
# Deny list applied to decomposition-chat workers (#2533). Unlike
|
|
3717
|
+
# milestone-chat, this type's WHOLE job is to write (issue create /
|
|
3718
|
+
# milestone create+add-child / drive-queue add / portal link), so this list
|
|
3719
|
+
# is deliberately narrow — it blocks raw `gh` mutations, repo-write git
|
|
3720
|
+
# commands, destructive git ops, and the three unrelated `coord` write
|
|
3721
|
+
# commands (approve/merge/assign) explicitly out of scope, while every write
|
|
3722
|
+
# path this session actually needs (`coord issue create`, `coord milestone
|
|
3723
|
+
# create`/`add-child`, `coord drive-queue add`, `coord portal link`) is
|
|
3724
|
+
# allowed by omission.
|
|
3725
|
+
DECOMPOSITION_CHAT_DENY_COMMANDS: list[str] = [
|
|
3726
|
+
"Bash(gh issue edit *)",
|
|
3727
|
+
"Bash(gh issue create *)",
|
|
3728
|
+
"Bash(gh issue delete *)",
|
|
3729
|
+
"Bash(gh issue close *)",
|
|
3730
|
+
"Bash(gh api -X PATCH *)",
|
|
3731
|
+
"Bash(gh api -X POST *)",
|
|
3732
|
+
"Bash(gh api -X DELETE *)",
|
|
3733
|
+
"Bash(gh pr *)",
|
|
3734
|
+
"Bash(gh repo *)",
|
|
3735
|
+
"Bash(gh milestone *)",
|
|
3736
|
+
"Bash(git push *)",
|
|
3737
|
+
"Bash(git commit *)",
|
|
3738
|
+
"Bash(git reset --hard *)",
|
|
3739
|
+
"Bash(git reset * --hard *)",
|
|
3740
|
+
"Bash(git branch -D *)",
|
|
3741
|
+
"Bash(git branch * -D *)",
|
|
3742
|
+
"Bash(git checkout -- .)",
|
|
3743
|
+
"Bash(git clean -f *)",
|
|
3744
|
+
"Bash(git clean * -f *)",
|
|
3745
|
+
"Bash(rm -rf *)",
|
|
3746
|
+
"Bash(rm -fr *)",
|
|
3747
|
+
"Bash(coord approve *)",
|
|
3748
|
+
"Bash(coord merge *)",
|
|
3749
|
+
"Bash(coord assign *)",
|
|
3750
|
+
]
|
|
3751
|
+
|
|
3646
3752
|
MOCK_AUTHOR_SYSTEM_PROMPT = """\
|
|
3647
3753
|
You are an independent mock-author agent for Gate A of a milestone \
|
|
3648
3754
|
(#930, docs/ORACLE_LOOP.md) — the pre-work architecture gate. You have \
|
|
@@ -4238,6 +4344,20 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
4238
4344
|
system_prompt = spec.system_prompt if spec.system_prompt else MILESTONE_CHAT_SYSTEM_PROMPT
|
|
4239
4345
|
system_prompt += build_deny_prompt(MILESTONE_CHAT_DENY_COMMANDS)
|
|
4240
4346
|
allowed_tools = "Read,Bash"
|
|
4347
|
+
elif spec.type == "decomposition-chat":
|
|
4348
|
+
# #2533 (ms-67 contract §4c): pull an approved portal submission
|
|
4349
|
+
# into a briefed session that decides oracle-loop-shaped-or-not,
|
|
4350
|
+
# files issue(s) via `coord issue create`, queues them via `coord
|
|
4351
|
+
# drive-queue add`, and records `coord portal link` — a mutating
|
|
4352
|
+
# chat type like milestone-chat above, with its own narrow deny
|
|
4353
|
+
# list (see DECOMPOSITION_CHAT_DENY_COMMANDS) rather than
|
|
4354
|
+
# new-issue-chat's blanket one, since this session's whole job is
|
|
4355
|
+
# to write via those specific `coord` commands.
|
|
4356
|
+
system_prompt = (
|
|
4357
|
+
spec.system_prompt if spec.system_prompt else DECOMPOSITION_CHAT_SYSTEM_PROMPT
|
|
4358
|
+
)
|
|
4359
|
+
system_prompt += build_deny_prompt(DECOMPOSITION_CHAT_DENY_COMMANDS)
|
|
4360
|
+
allowed_tools = "Read,Bash"
|
|
4241
4361
|
elif spec.type == "mock-author":
|
|
4242
4362
|
# #930 (docs/ORACLE_LOOP.md, Gate A): an independent mock-author
|
|
4243
4363
|
# agent renders a viewable mock + writes `contract.md` under
|
|
@@ -4435,12 +4555,17 @@ def _user_message_line(text: str) -> bytes:
|
|
|
4435
4555
|
# a non-closes-issue original (test-author/mock-author/...) — it gets a
|
|
4436
4556
|
# worktree and runs `gh pr create`, the same GitHub-mutating shape as
|
|
4437
4557
|
# `type="work"` had before #1142 gave it its own type, so it must stay here.
|
|
4558
|
+
# ``decomposition-chat`` (#2533) is a chat too — no git worktree — but its
|
|
4559
|
+
# whole job is to mutate GitHub (`coord issue create` / `coord milestone
|
|
4560
|
+
# create`/`add-child`) and the drive queue (`coord drive-queue add`), the
|
|
4561
|
+
# same "no worktree, but real mutation" shape ``milestone-chat`` has above.
|
|
4438
4562
|
WRITE_CAPABLE_SPEC_TYPES: frozenset[str] = frozenset({
|
|
4439
4563
|
"work",
|
|
4440
4564
|
"review",
|
|
4441
4565
|
"smoke",
|
|
4442
4566
|
"conflict-fix",
|
|
4443
4567
|
"milestone-chat",
|
|
4568
|
+
"decomposition-chat",
|
|
4444
4569
|
"mock-author",
|
|
4445
4570
|
"test-author",
|
|
4446
4571
|
"pr-helper",
|
|
@@ -284,6 +284,56 @@ def portal_link(
|
|
|
284
284
|
)
|
|
285
285
|
|
|
286
286
|
|
|
287
|
+
# ── #2533 (ms-67 PB-3): pull an approved submission into a decomposition chat ──
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
@portal_group.command("decompose-chat")
|
|
291
|
+
@_CONFIG_OPTION
|
|
292
|
+
@click.argument("submission_id")
|
|
293
|
+
@click.option(
|
|
294
|
+
"--machine",
|
|
295
|
+
"machine_override",
|
|
296
|
+
default=None,
|
|
297
|
+
help="Force a specific machine (must claim every repo the submission maps to).",
|
|
298
|
+
)
|
|
299
|
+
def portal_decompose_chat(config_path, submission_id: str, machine_override: str | None) -> None:
|
|
300
|
+
"""Dispatch a ``type="decomposition-chat"`` session for SUBMISSION_ID (#2533).
|
|
301
|
+
|
|
302
|
+
The TUI's "Pull into decomposition session" action (ms-67 contract §4a/
|
|
303
|
+
§4c) shells this out, exactly the way `coord new-issue-chat` / `coord
|
|
304
|
+
milestone chat` already work — prints the new assignment id to stdout,
|
|
305
|
+
which the TUI binds a `ChatController` overlay to once it appears in the
|
|
306
|
+
board poll.
|
|
307
|
+
|
|
308
|
+
Briefs the session with SUBMISSION_ID's outcome / audience / done-
|
|
309
|
+
definition / constraints, its mapped repo(s), and `coordinator.yml`
|
|
310
|
+
topology context for those repo(s) (:mod:`coord.decomposition_chat`).
|
|
311
|
+
The session's own job — deciding whether the work is oracle-loop-shaped,
|
|
312
|
+
filing issue(s) via `coord issue create`, queueing them via `coord
|
|
313
|
+
drive-queue add`, and recording `coord portal link` — is described in its
|
|
314
|
+
system prompt (`coord.agent.DECOMPOSITION_CHAT_SYSTEM_PROMPT`), not here.
|
|
315
|
+
|
|
316
|
+
Reads through :func:`coord.approved_work.approved_submissions`, which
|
|
317
|
+
(like every other portal-bridge reader) resolves state out of this
|
|
318
|
+
machine's own ``~/.coord/coord.db`` — a daemon-host command, same as
|
|
319
|
+
``link``/``publish-mocks`` above.
|
|
320
|
+
"""
|
|
321
|
+
_refuse_if_thin_client("decompose-chat")
|
|
322
|
+
|
|
323
|
+
from coord.decomposition_chat import dispatch_decomposition_chat
|
|
324
|
+
|
|
325
|
+
cfg = _load_config(config_path)
|
|
326
|
+
try:
|
|
327
|
+
assignment_id, machine = dispatch_decomposition_chat(
|
|
328
|
+
submission_id, cfg, machine_override=machine_override
|
|
329
|
+
)
|
|
330
|
+
except RuntimeError as exc:
|
|
331
|
+
click.secho(f"error: {exc}", fg="red")
|
|
332
|
+
raise SystemExit(1) from exc
|
|
333
|
+
click.echo(assignment_id)
|
|
334
|
+
click.echo(f"# dispatched to {machine}", err=True)
|
|
335
|
+
|
|
336
|
+
|
|
287
337
|
# ── #2513 (PDR-5): manual "publish mocks to portal" ─────────────────────────
|
|
288
338
|
|
|
289
339
|
|
|
@@ -69,10 +69,22 @@ def _open(path: Path) -> sqlite3.Connection:
|
|
|
69
69
|
conn.execute("PRAGMA busy_timeout=5000")
|
|
70
70
|
conn.execute("PRAGMA foreign_keys=ON")
|
|
71
71
|
conn.row_factory = sqlite3.Row
|
|
72
|
-
_ensure_schema
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
# #2598: _ensure_schema/_maybe_migrate_json/_migrate_gate_order/
|
|
73
|
+
# _backfill_orphaned_review_verdicts are convergent one-time operations,
|
|
74
|
+
# not per-open invariants — but every one of them ran unconditionally on
|
|
75
|
+
# every process's DB open, so a read-only command (`coord status`) began
|
|
76
|
+
# a write transaction (and, for the unconstrained schema_version table,
|
|
77
|
+
# left a junk row behind — 45,708 of them observed in the field) purely
|
|
78
|
+
# to open a connection it only ever intended to read from. Gate the
|
|
79
|
+
# whole block on a cheap read-only version check: a database already at
|
|
80
|
+
# _DB_SCHEMA_VERSION does none of this work, so opening it issues no
|
|
81
|
+
# write at all. See _read_schema_version's docstring for why this read
|
|
82
|
+
# is correct against both the pre-#2598 and post-#2598 table shapes.
|
|
83
|
+
if _read_schema_version(conn) < _DB_SCHEMA_VERSION:
|
|
84
|
+
_ensure_schema(conn)
|
|
85
|
+
_maybe_migrate_json(conn)
|
|
86
|
+
_migrate_gate_order(conn)
|
|
87
|
+
_backfill_orphaned_review_verdicts(conn)
|
|
76
88
|
return conn
|
|
77
89
|
|
|
78
90
|
|
|
@@ -143,13 +155,94 @@ def retry_on_locked(
|
|
|
143
155
|
|
|
144
156
|
# ── Schema ────────────────────────────────────────────────────────────────────
|
|
145
157
|
|
|
158
|
+
# #2598: bumped from the original unversioned "1" written by every process
|
|
159
|
+
# forever. Read by _read_schema_version()/_open() as the target a database
|
|
160
|
+
# must reach before _open() can skip its write path entirely. Whoever adds
|
|
161
|
+
# the NEXT one-shot migration (another _migrate_* or _backfill_* function
|
|
162
|
+
# meant to run once per database, not once per process) must bump this too
|
|
163
|
+
# — otherwise an already-caught-up database (version == _DB_SCHEMA_VERSION)
|
|
164
|
+
# will never run it, because the whole write path is gated on this compare.
|
|
165
|
+
_DB_SCHEMA_VERSION = 2
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def _read_schema_version(conn: sqlite3.Connection) -> int:
|
|
169
|
+
"""Cheap, read-only probe of how caught-up *conn*'s database is (#2598).
|
|
170
|
+
|
|
171
|
+
A plain ``SELECT`` — never begins a write transaction, so calling this
|
|
172
|
+
to decide whether _open() needs to do any write work cannot itself take
|
|
173
|
+
the write lock.
|
|
174
|
+
|
|
175
|
+
Returns 0 when ``schema_version`` doesn't exist yet (brand-new database)
|
|
176
|
+
or is empty. Otherwise returns the highest stored value, which reads
|
|
177
|
+
correctly against *either* table shape: the pre-#2598 unconstrained
|
|
178
|
+
table (every row holds the same value, so MAX is that value — junk rows
|
|
179
|
+
don't change the answer) or the post-#2598 constrained table (exactly
|
|
180
|
+
one row). A pre-#2598 database therefore reads as version 1, which is
|
|
181
|
+
``< _DB_SCHEMA_VERSION`` (2) — so it takes the write path exactly once
|
|
182
|
+
more, which is what collapses its schema_version duplicates and applies
|
|
183
|
+
the PRIMARY KEY (see _fix_schema_version_table). Every open after that
|
|
184
|
+
reads 2 and skips the write path entirely.
|
|
185
|
+
"""
|
|
186
|
+
try:
|
|
187
|
+
row = conn.execute("SELECT MAX(version) FROM schema_version").fetchone()
|
|
188
|
+
except sqlite3.OperationalError:
|
|
189
|
+
return 0 # table doesn't exist yet
|
|
190
|
+
if row is None or row[0] is None:
|
|
191
|
+
return 0
|
|
192
|
+
return int(row[0])
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def _fix_schema_version_table(conn: sqlite3.Connection) -> None:
|
|
196
|
+
"""Collapse the pre-#2598 unconstrained ``schema_version`` table.
|
|
197
|
+
|
|
198
|
+
The original table declared no ``PRIMARY KEY``/``UNIQUE`` constraint, so
|
|
199
|
+
``INSERT OR IGNORE INTO schema_version VALUES (1)`` — meant to be a
|
|
200
|
+
once-per-database no-op — actually succeeded on every single process
|
|
201
|
+
open, leaving one junk row per open (45,708 observed in the field).
|
|
202
|
+
This rebuilds the table with a real ``PRIMARY KEY`` on ``version`` so
|
|
203
|
+
that no longer happens, collapsing any existing duplicate rows down to
|
|
204
|
+
their distinct values in the process.
|
|
205
|
+
|
|
206
|
+
Safe to call against any existing shape: the old broken table (any
|
|
207
|
+
number of duplicate rows, no constraint), the new constrained table
|
|
208
|
+
(already migrated — a no-op), or no table at all (fresh database).
|
|
209
|
+
"""
|
|
210
|
+
row = conn.execute(
|
|
211
|
+
"SELECT sql FROM sqlite_master WHERE type='table' AND name='schema_version'"
|
|
212
|
+
).fetchone()
|
|
213
|
+
if row is not None and "PRIMARY KEY" in (row[0] or ""):
|
|
214
|
+
return # already the constrained post-#2598 shape
|
|
215
|
+
conn.executescript(
|
|
216
|
+
"""
|
|
217
|
+
CREATE TABLE IF NOT EXISTS schema_version (version INTEGER NOT NULL);
|
|
218
|
+
CREATE TABLE schema_version_new (version INTEGER PRIMARY KEY);
|
|
219
|
+
INSERT OR IGNORE INTO schema_version_new
|
|
220
|
+
SELECT DISTINCT version FROM schema_version;
|
|
221
|
+
DROP TABLE schema_version;
|
|
222
|
+
ALTER TABLE schema_version_new RENAME TO schema_version;
|
|
223
|
+
"""
|
|
224
|
+
)
|
|
225
|
+
conn.commit()
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def _set_schema_version(conn: sqlite3.Connection, version: int) -> None:
|
|
229
|
+
"""Overwrite ``schema_version`` with a single row holding *version*.
|
|
230
|
+
|
|
231
|
+
``schema_version`` holds exactly one fact — how caught-up this database
|
|
232
|
+
is — so a version bump DELETEs the old row rather than accumulating one
|
|
233
|
+
row per version ever seen (which ``INSERT OR IGNORE``/``INSERT OR
|
|
234
|
+
REPLACE`` would do here, since they only dedupe on a *matching* primary
|
|
235
|
+
key, and a version bump's whole point is that the key changes).
|
|
236
|
+
"""
|
|
237
|
+
conn.execute("DELETE FROM schema_version")
|
|
238
|
+
conn.execute("INSERT INTO schema_version (version) VALUES (?)", (version,))
|
|
239
|
+
conn.commit()
|
|
240
|
+
|
|
241
|
+
|
|
146
242
|
def _ensure_schema(conn: sqlite3.Connection) -> None:
|
|
147
243
|
"""Create all tables and indexes if they don't already exist."""
|
|
244
|
+
_fix_schema_version_table(conn)
|
|
148
245
|
conn.executescript("""
|
|
149
|
-
CREATE TABLE IF NOT EXISTS schema_version (
|
|
150
|
-
version INTEGER NOT NULL
|
|
151
|
-
);
|
|
152
|
-
|
|
153
246
|
CREATE TABLE IF NOT EXISTS assignments (
|
|
154
247
|
assignment_id TEXT PRIMARY KEY,
|
|
155
248
|
machine_name TEXT NOT NULL,
|
|
@@ -686,13 +779,12 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
|
|
|
686
779
|
ON portal_outbox(state, submission_id, seq);
|
|
687
780
|
CREATE INDEX IF NOT EXISTS idx_portal_events_submission
|
|
688
781
|
ON portal_events(submission_id);
|
|
689
|
-
|
|
690
|
-
INSERT OR IGNORE INTO schema_version VALUES (1);
|
|
691
782
|
""")
|
|
692
783
|
conn.commit()
|
|
693
784
|
# Column-level migrations for existing databases. SQLite does not support
|
|
694
785
|
# "ADD COLUMN IF NOT EXISTS", so we catch OperationalError instead.
|
|
695
786
|
_migrate_add_columns(conn)
|
|
787
|
+
_set_schema_version(conn, _DB_SCHEMA_VERSION)
|
|
696
788
|
|
|
697
789
|
|
|
698
790
|
def _migrate_add_columns(conn: sqlite3.Connection) -> None:
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"""#2533 (ms-67 contract §4c): dispatch a `type="decomposition-chat"` session
|
|
2
|
+
for "Pull into decomposition session" — the TUI action that turns an
|
|
3
|
+
Approved-work-items row (a signed-off portal submission) into a briefed
|
|
4
|
+
`claude -p` chat whose job is to decide whether the work is oracle-loop-shaped,
|
|
5
|
+
file the resulting GitHub issue(s) via `coord issue create`, and queue them via
|
|
6
|
+
`coord drive-queue add`.
|
|
7
|
+
|
|
8
|
+
Used by `coord portal decompose-chat <submission_id>` (the CLI command the
|
|
9
|
+
TUI shells out to, mirroring `coord new-issue-chat` / `coord milestone chat`
|
|
10
|
+
— see `coord/new_issue_chat.py` / `coord/milestone_dispatch.py` for the two
|
|
11
|
+
precedents this module follows).
|
|
12
|
+
|
|
13
|
+
**Reads through the existing bridge, never a new direct portal read**
|
|
14
|
+
(#2533's own briefing): the submission's four briefing fields (outcome /
|
|
15
|
+
audience / done-definition / constraints) plus its server-resolved mapped
|
|
16
|
+
repo(s) come from :func:`coord.approved_work.approved_submissions` — the same
|
|
17
|
+
function that already serves the TUI's `/board` `approved_submissions` block
|
|
18
|
+
(#2532) — rather than re-deriving them from `coord.portal_store` directly.
|
|
19
|
+
|
|
20
|
+
**Machine selection is generalized to every mapped repo** (contract §4c):
|
|
21
|
+
unlike :func:`coord.new_issue_chat.pick_new_issue_chat_machine` (one repo),
|
|
22
|
+
a submission can map to more than one repo, and the picked machine must be
|
|
23
|
+
able to work on ALL of them — a session that can only reach some of the
|
|
24
|
+
repos it's meant to decompose into is worse than refusing outright. §6.7
|
|
25
|
+
flags this as a genuinely open question the contract does not resolve beyond
|
|
26
|
+
"refuse clearly" — this module's refusal is a plain `RuntimeError`, same
|
|
27
|
+
posture every other dispatcher in this file already uses.
|
|
28
|
+
"""
|
|
29
|
+
from __future__ import annotations
|
|
30
|
+
|
|
31
|
+
import time
|
|
32
|
+
import uuid
|
|
33
|
+
from typing import TYPE_CHECKING, Any
|
|
34
|
+
|
|
35
|
+
if TYPE_CHECKING: # pragma: no cover - typing only
|
|
36
|
+
from coord.config import Config
|
|
37
|
+
from coord.models import Machine
|
|
38
|
+
|
|
39
|
+
#: Sentinel `issue_title` this module writes onto the dispatched assignment
|
|
40
|
+
#: — mirrors `dispatch_new_issue_chat`'s own `"(new issue draft)"` sentinel
|
|
41
|
+
#: for a chat type with no real GitHub issue yet. The TUI's own bind path
|
|
42
|
+
#: (`tui/src/app/dialogs.rs::maybe_bind_pending_decomposition_chat`) matches
|
|
43
|
+
#: on this exact string (with the submission id substituted in) since
|
|
44
|
+
#: `Assignment` carries no `submission_id` column of its own — see that
|
|
45
|
+
#: function's doc comment for why this is the module's own choice, not
|
|
46
|
+
#: something #2533's contract pins.
|
|
47
|
+
def _issue_title(submission_id: str) -> str:
|
|
48
|
+
return f"decomposition: {submission_id}"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def pick_decomposition_chat_machine(cfg: "Config", repos: list[str]) -> "Machine | None":
|
|
52
|
+
"""Pick a machine that can work on EVERY repo in *repos*.
|
|
53
|
+
|
|
54
|
+
Contract §4c: "the picked machine must list **all** of the submission's
|
|
55
|
+
mapped repos ... not just one." Returns the first unpaused machine
|
|
56
|
+
satisfying `m.can_work_on(r)` for every `r` in *repos*. `None` when
|
|
57
|
+
*repos* is empty (nothing to route) or no single machine covers them
|
|
58
|
+
all — callers must treat `None` as a hard refusal, never fall back to a
|
|
59
|
+
partial match.
|
|
60
|
+
"""
|
|
61
|
+
from coord.machine_pause import paused_set
|
|
62
|
+
|
|
63
|
+
if not repos:
|
|
64
|
+
return None
|
|
65
|
+
paused = paused_set(cfg.machines)
|
|
66
|
+
for m in cfg.machines:
|
|
67
|
+
if m.name in paused:
|
|
68
|
+
continue
|
|
69
|
+
if all(m.can_work_on(r) for r in repos):
|
|
70
|
+
return m
|
|
71
|
+
return None
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _repo_topology_context(cfg: "Config", repos: list[str]) -> str:
|
|
75
|
+
"""One paragraph of `coordinator.yml` topology per mapped repo — the
|
|
76
|
+
"coordinator.yml topology context ... the same way docs/CUSTOMER_PORTAL.md's
|
|
77
|
+
design-round step already uses it" #2533's own body asks for.
|
|
78
|
+
|
|
79
|
+
No design-round dispatcher exists yet to copy a wire shape from (flagged
|
|
80
|
+
in ms-67 contract.md §5's own notes as a proposal, not a read-off-the-
|
|
81
|
+
schema fact) — this is this module's own reasonable rendering: the
|
|
82
|
+
repo's GitHub slug, its `depends_on`, and which configured machines
|
|
83
|
+
claim it.
|
|
84
|
+
"""
|
|
85
|
+
lines: list[str] = []
|
|
86
|
+
for repo_name in repos:
|
|
87
|
+
repo_cfg = cfg.repo(repo_name)
|
|
88
|
+
if repo_cfg is None:
|
|
89
|
+
lines.append(f"- {repo_name}: (not found in coordinator.yml — check the mapping)")
|
|
90
|
+
continue
|
|
91
|
+
machines = [m.name for m in cfg.machines if m.can_work_on(repo_name)]
|
|
92
|
+
depends = ", ".join(repo_cfg.depends_on) if repo_cfg.depends_on else "(none)"
|
|
93
|
+
lines.append(
|
|
94
|
+
f"- {repo_cfg.name} ({repo_cfg.github}): depends_on={depends}; "
|
|
95
|
+
f"machines={', '.join(machines) if machines else '(none configured)'}"
|
|
96
|
+
)
|
|
97
|
+
return "\n".join(lines) if lines else "(no mapped repos)"
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def build_decomposition_chat_briefing(
|
|
101
|
+
*,
|
|
102
|
+
submission: dict[str, Any],
|
|
103
|
+
topology_context: str,
|
|
104
|
+
) -> str:
|
|
105
|
+
"""Compose the seed briefing the worker sees as its first user message.
|
|
106
|
+
|
|
107
|
+
Carries exactly the four submission fields #2533's own body names
|
|
108
|
+
(outcome / audience / done-definition / constraints) plus the mapped
|
|
109
|
+
repo(s) and `coordinator.yml` topology context — identical substance to
|
|
110
|
+
what the Approved-work-items detail pane already shows the operator
|
|
111
|
+
(ms-67 contract §4b: "nothing hidden between 'looks right in the panel'
|
|
112
|
+
and 'is what the session got'").
|
|
113
|
+
"""
|
|
114
|
+
submission_id = submission.get("submission_id", "")
|
|
115
|
+
repos = submission.get("repos") or []
|
|
116
|
+
parts: list[str] = []
|
|
117
|
+
parts.append(f"=== Decomposition chat context for submission {submission_id} ===\n")
|
|
118
|
+
parts.append(f"Client: {submission.get('client', '')}")
|
|
119
|
+
parts.append(
|
|
120
|
+
f"Project: {submission.get('project_id', '')} ({submission.get('project_label', '')})"
|
|
121
|
+
)
|
|
122
|
+
parts.append("")
|
|
123
|
+
parts.append("OUTCOME:")
|
|
124
|
+
parts.append(submission.get("outcome", "") or "(none provided)")
|
|
125
|
+
parts.append("")
|
|
126
|
+
parts.append("AUDIENCE:")
|
|
127
|
+
parts.append(submission.get("audience", "") or "(none provided)")
|
|
128
|
+
parts.append("")
|
|
129
|
+
parts.append("DONE DEFINITION:")
|
|
130
|
+
parts.append(submission.get("done_definition", "") or "(none provided)")
|
|
131
|
+
parts.append("")
|
|
132
|
+
parts.append("CONSTRAINTS:")
|
|
133
|
+
parts.append(submission.get("constraints", "") or "(none provided)")
|
|
134
|
+
parts.append("")
|
|
135
|
+
parts.append(f"MAPPED REPO(S): {', '.join(repos) if repos else '(none)'}")
|
|
136
|
+
parts.append("")
|
|
137
|
+
parts.append("COORDINATOR.YML TOPOLOGY CONTEXT:")
|
|
138
|
+
parts.append(topology_context)
|
|
139
|
+
parts.append("")
|
|
140
|
+
parts.append("---")
|
|
141
|
+
parts.append(
|
|
142
|
+
"Decide whether this is oracle-loop-shaped work (docs/ORACLE_LOOP.md) "
|
|
143
|
+
"or small enough to skip straight to normal dispatch, then produce one "
|
|
144
|
+
"or more GitHub issues via `coord issue create` and queue them via "
|
|
145
|
+
"`coord drive-queue add`. Once queued, record the portal link via "
|
|
146
|
+
"`coord portal link` — see your system prompt for the exact command "
|
|
147
|
+
"and the one-off-issue caveat."
|
|
148
|
+
)
|
|
149
|
+
return "\n".join(parts)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def dispatch_decomposition_chat(
|
|
153
|
+
submission_id: str,
|
|
154
|
+
config: "Config",
|
|
155
|
+
*,
|
|
156
|
+
machine_override: str | None = None,
|
|
157
|
+
) -> tuple[str, str]:
|
|
158
|
+
"""End-to-end: look up *submission_id*, pick a machine, seed the
|
|
159
|
+
briefing, dispatch a ``type="decomposition-chat"`` assignment. Returns
|
|
160
|
+
``(assignment_id, machine_name)``.
|
|
161
|
+
|
|
162
|
+
Raises ``RuntimeError`` when the submission isn't a currently-approved
|
|
163
|
+
one, has no mapped repo, no machine claims every mapped repo (or the
|
|
164
|
+
forced ``machine_override`` doesn't), or the agent rejects the dispatch.
|
|
165
|
+
"""
|
|
166
|
+
from coord.approved_work import approved_submissions
|
|
167
|
+
|
|
168
|
+
rows = approved_submissions(config)
|
|
169
|
+
submission = next((r for r in rows if r.get("submission_id") == submission_id), None)
|
|
170
|
+
if submission is None:
|
|
171
|
+
raise RuntimeError(
|
|
172
|
+
f"submission {submission_id!r} is not a currently-approved portal "
|
|
173
|
+
"submission (coord.approved_work.approved_submissions) — nothing to decompose"
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
repos: list[str] = submission.get("repos") or []
|
|
177
|
+
if not repos:
|
|
178
|
+
raise RuntimeError(
|
|
179
|
+
f"submission {submission_id!r} has no mapped repo (portal.project_repos "
|
|
180
|
+
"in coordinator.yml) — map its project before pulling it into a "
|
|
181
|
+
"decomposition session"
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
if machine_override:
|
|
185
|
+
machine = next((m for m in config.machines if m.name == machine_override), None)
|
|
186
|
+
if machine is None:
|
|
187
|
+
raise RuntimeError(f"machine {machine_override!r} not in coordinator.yml")
|
|
188
|
+
missing = [r for r in repos if not machine.can_work_on(r)]
|
|
189
|
+
if missing:
|
|
190
|
+
raise RuntimeError(
|
|
191
|
+
f"machine {machine_override!r} does not list repo(s) "
|
|
192
|
+
f"{', '.join(missing)} — submission {submission_id!r} maps to "
|
|
193
|
+
f"{', '.join(repos)}, all of which the target machine must claim"
|
|
194
|
+
)
|
|
195
|
+
else:
|
|
196
|
+
picked = pick_decomposition_chat_machine(config, repos)
|
|
197
|
+
if picked is None:
|
|
198
|
+
raise RuntimeError(
|
|
199
|
+
f"no single machine claims every repo submission {submission_id!r} "
|
|
200
|
+
f"maps to ({', '.join(repos)}) — decomposition-chat refuses rather "
|
|
201
|
+
"than dispatching a session that can't reach all of them "
|
|
202
|
+
"(ms-67 contract §4c/§6.7)"
|
|
203
|
+
)
|
|
204
|
+
machine = picked
|
|
205
|
+
|
|
206
|
+
topology_context = _repo_topology_context(config, repos)
|
|
207
|
+
briefing = build_decomposition_chat_briefing(
|
|
208
|
+
submission=submission, topology_context=topology_context
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
resolved_model = config.models.default
|
|
212
|
+
from coord.models import Assignment, Proposal
|
|
213
|
+
|
|
214
|
+
proposal = Proposal(
|
|
215
|
+
id=0,
|
|
216
|
+
machine_name=machine.name,
|
|
217
|
+
repo_name=repos[0],
|
|
218
|
+
# No existing issue yet — same 0 sentinel `new-issue-chat` uses.
|
|
219
|
+
issue_number=0,
|
|
220
|
+
issue_title=_issue_title(submission_id),
|
|
221
|
+
rationale="decomposition-chat",
|
|
222
|
+
briefing=briefing,
|
|
223
|
+
model=resolved_model,
|
|
224
|
+
type="decomposition-chat",
|
|
225
|
+
required_gates=[],
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
from coord.dispatch import dispatch_with_retry
|
|
229
|
+
from coord.state import record_dispatched_assignment
|
|
230
|
+
|
|
231
|
+
response = dispatch_with_retry(
|
|
232
|
+
proposal,
|
|
233
|
+
config,
|
|
234
|
+
max_retries=config.concurrency.max_retries,
|
|
235
|
+
backoff_base=config.concurrency.backoff_base,
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
assignment_id = response.get("id") or uuid.uuid4().hex[:12]
|
|
239
|
+
|
|
240
|
+
repo_cfg = config.repo(repos[0])
|
|
241
|
+
asg = Assignment(
|
|
242
|
+
machine_name=machine.name,
|
|
243
|
+
repo_name=repos[0],
|
|
244
|
+
issue_number=0,
|
|
245
|
+
issue_title=_issue_title(submission_id),
|
|
246
|
+
files_allowed=[],
|
|
247
|
+
files_forbidden=[],
|
|
248
|
+
briefing=briefing,
|
|
249
|
+
assignment_id=assignment_id,
|
|
250
|
+
status="running",
|
|
251
|
+
dispatched_at=time.time(),
|
|
252
|
+
type="decomposition-chat",
|
|
253
|
+
model=resolved_model,
|
|
254
|
+
)
|
|
255
|
+
record_dispatched_assignment(
|
|
256
|
+
assignment=asg,
|
|
257
|
+
repo_github=repo_cfg.github if repo_cfg is not None else repos[0],
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
return assignment_id, machine.name
|