code-coordinator 0.5.235__tar.gz → 0.5.237__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.235 → code_coordinator-0.5.237}/PKG-INFO +1 -1
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/SOURCES.txt +2 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/scm_file_list.json +2 -0
- code_coordinator-0.5.237/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/acceptance.py +38 -4
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agent.py +125 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/portal.py +50 -0
- code_coordinator-0.5.237/coord/decomposition_chat.py +260 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_acceptance.py +109 -1
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_portal.py +55 -0
- code_coordinator-0.5.237/tests/test_decomposition_chat.py +259 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/approved.rs +227 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/dialogs.rs +207 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/events.rs +21 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/fixtures.rs +1 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/mod.rs +33 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/settings_ui.rs +10 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/sidebar.rs +6 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/tests.rs +21 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/types.rs +8 -0
- code_coordinator-0.5.235/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.gitignore +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/CLAUDE.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/GOAL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/LICENSE +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/MANIFEST.in +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/README.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/__init__.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/audit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/block_log.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/board_service.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/brain.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/claim.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/cli.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/client.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/comments.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/config.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dao.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/db.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deps.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/drive.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/events.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/filelock.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/freshness.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/gates.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/goal.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/context.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/models.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/render.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/units.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/hooks.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/interactive.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/models.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/network.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notify.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/openapi.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/parentage.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/plans.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/progress.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/release_window.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/reports.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/review.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/self_health.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/smoke.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/split_work.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/state.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/test_author.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/test_report.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/usage.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/install-agent.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/pyproject.toml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/setup.cfg +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/__init__.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/conftest.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_db.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_events.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_init.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_models.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_network.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_session.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_split.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_state.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.235 → code_coordinator-0.5.237}/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.235 → code_coordinator-0.5.237}/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",
|
|
@@ -838,6 +838,36 @@ def _issue_header_re(issue_number: int) -> re.Pattern[str]:
|
|
|
838
838
|
return re.compile(rf"^(\s*)['\"]?{issue_number}['\"]?\s*:\s*(#.*)?$")
|
|
839
839
|
|
|
840
840
|
|
|
841
|
+
def _parse_list_item_scalar(line: str) -> str | None:
|
|
842
|
+
"""Resolve one YAML block-sequence item line (``- ...``) to its parsed
|
|
843
|
+
scalar value — the same value :func:`parse_manifest_text` would produce
|
|
844
|
+
for it — rather than the raw text as written. #2296: a Playwright test id
|
|
845
|
+
always starts with ``[chromium]``, so its manifest entry is *always*
|
|
846
|
+
quoted (an unquoted leading ``[`` is a YAML flow sequence, not a string);
|
|
847
|
+
comparing the raw scalar against the parsed id then never matches. Going
|
|
848
|
+
through :mod:`yaml` here instead handles double- and single-quoted
|
|
849
|
+
scalars (incl. the ``''`` embedded-quote escape) and, since YAML's own
|
|
850
|
+
comment rule applies, a ``#`` inside a quoted scalar is correctly treated
|
|
851
|
+
as data rather than truncated as a comment.
|
|
852
|
+
|
|
853
|
+
Returns ``None`` for anything that isn't a well-formed single-item
|
|
854
|
+
sequence line (blank/comment-only, flow-style, malformed YAML, or a
|
|
855
|
+
non-string value) so the caller leaves such lines untouched rather than
|
|
856
|
+
risk misclassifying them.
|
|
857
|
+
"""
|
|
858
|
+
stripped = line.strip()
|
|
859
|
+
if not stripped.startswith("-"):
|
|
860
|
+
return None
|
|
861
|
+
try:
|
|
862
|
+
parsed = yaml.safe_load(stripped)
|
|
863
|
+
except yaml.YAMLError:
|
|
864
|
+
return None
|
|
865
|
+
if not isinstance(parsed, list) or len(parsed) != 1:
|
|
866
|
+
return None
|
|
867
|
+
value = parsed[0]
|
|
868
|
+
return value if isinstance(value, str) else None
|
|
869
|
+
|
|
870
|
+
|
|
841
871
|
def _strip_cleared_ids_from_issue_block(
|
|
842
872
|
body: "list[str]", issue_number: int, cleared_ids: "set[str]",
|
|
843
873
|
) -> "tuple[list[str], bool]":
|
|
@@ -871,9 +901,8 @@ def _strip_cleared_ids_from_issue_block(
|
|
|
871
901
|
i += 1
|
|
872
902
|
new_sub = []
|
|
873
903
|
for sub_line in sub:
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
if item_m and item_m.group(1) in cleared_ids:
|
|
904
|
+
item = _parse_list_item_scalar(sub_line)
|
|
905
|
+
if item is not None and item in cleared_ids:
|
|
877
906
|
changed = True
|
|
878
907
|
continue
|
|
879
908
|
new_sub.append(sub_line)
|
|
@@ -1286,7 +1315,12 @@ def clear_expected_red_via_pr(
|
|
|
1286
1315
|
|
|
1287
1316
|
new_text = clear_expected_red_entries(text, issue_number, ids)
|
|
1288
1317
|
if new_text is None:
|
|
1289
|
-
|
|
1318
|
+
# #2296: ids were passed in and none matched — that's a defect in
|
|
1319
|
+
# the text surgery (or a manifest that no longer has this issue's
|
|
1320
|
+
# block), not a benign no-op. Prefix `warning:` so it's greppable
|
|
1321
|
+
# and so `coord acceptance expected-red --clear` doesn't report a
|
|
1322
|
+
# clean sweep over an operation that actually did nothing.
|
|
1323
|
+
return "warning: expected_red text unchanged (nothing matched)"
|
|
1290
1324
|
|
|
1291
1325
|
get_head = getattr(ops, "get_default_branch_head", None)
|
|
1292
1326
|
create_branch = getattr(ops, "create_remote_branch", None)
|
|
@@ -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
|
|
|
@@ -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
|