code-coordinator 0.5.217__tar.gz → 0.5.218__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.217 → code_coordinator-0.5.218}/PKG-INFO +1 -1
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/SOURCES.txt +3 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/scm_file_list.json +3 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/scm_version.json +2 -2
- code_coordinator-0.5.218/coord/approved_work.py +157 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/config.py +106 -2
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-drive-queue.service +28 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/portal_store.py +28 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/serve_app.py +17 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-drive-queue.service +28 -0
- code_coordinator-0.5.218/tests/test_approved_work_2532.py +395 -0
- code_coordinator-0.5.218/tests/test_deploy_drive_queue_unit.py +141 -0
- code_coordinator-0.5.218/tui/src/app/approved.rs +588 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/data.rs +11 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/events.rs +81 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/fixtures.rs +4 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/mod.rs +48 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/render.rs +14 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/sidebar.rs +6 -1
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/types.rs +59 -0
- code_coordinator-0.5.217/tests/test_deploy_drive_queue_unit.py +0 -58
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.gitignore +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/CLAUDE.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/GOAL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/LICENSE +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/MANIFEST.in +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/README.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/__init__.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agent.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/audit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/block_log.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/board_service.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/brain.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/claim.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/cli.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/client.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/comments.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dao.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/db.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deps.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/drive.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/events.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/filelock.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/freshness.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/gates.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/goal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/context.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/models.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/render.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/units.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/hooks.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/interactive.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/models.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/network.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notify.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/openapi.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/parentage.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/plans.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/progress.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/release_window.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/reports.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/review.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/self_health.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/smoke.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/split_work.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/state.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/test_author.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/test_report.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/usage.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/install-agent.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/pyproject.toml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/setup.cfg +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/__init__.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/conftest.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_db.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_events.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_init.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_models.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_network.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_session.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_split.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_state.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -36,6 +36,7 @@ coord/acceptance_drivers.py
|
|
|
36
36
|
coord/agent.py
|
|
37
37
|
coord/agent_app.py
|
|
38
38
|
coord/agent_update.py
|
|
39
|
+
coord/approved_work.py
|
|
39
40
|
coord/audit.py
|
|
40
41
|
coord/auto_loop.py
|
|
41
42
|
coord/block_log.py
|
|
@@ -364,6 +365,7 @@ tests/test_agent_zero_commit.py
|
|
|
364
365
|
tests/test_ambient_home_isolation.py
|
|
365
366
|
tests/test_approve_reject_plan.py
|
|
366
367
|
tests/test_approve_usage_gate.py
|
|
368
|
+
tests/test_approved_work_2532.py
|
|
367
369
|
tests/test_assignment_already_recorded_daemon.py
|
|
368
370
|
tests/test_audit_log.py
|
|
369
371
|
tests/test_audit_outcome.py
|
|
@@ -770,6 +772,7 @@ tui/src/commands.rs
|
|
|
770
772
|
tui/src/lib.rs
|
|
771
773
|
tui/src/main.rs
|
|
772
774
|
tui/src/settings.rs
|
|
775
|
+
tui/src/app/approved.rs
|
|
773
776
|
tui/src/app/audit.rs
|
|
774
777
|
tui/src/app/chat.rs
|
|
775
778
|
tui/src/app/data.rs
|
{code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"coord/agents/opencode/.gitignore",
|
|
31
31
|
"coord/agents/opencode/agents/work.md",
|
|
32
32
|
"coord/agents/opencode/routing.jsonc",
|
|
33
|
+
"coord/approved_work.py",
|
|
33
34
|
"coord/audit.py",
|
|
34
35
|
"coord/auto_loop.py",
|
|
35
36
|
"coord/block_log.py",
|
|
@@ -434,6 +435,7 @@
|
|
|
434
435
|
"tests/test_ambient_home_isolation.py",
|
|
435
436
|
"tests/test_approve_reject_plan.py",
|
|
436
437
|
"tests/test_approve_usage_gate.py",
|
|
438
|
+
"tests/test_approved_work_2532.py",
|
|
437
439
|
"tests/test_assignment_already_recorded_daemon.py",
|
|
438
440
|
"tests/test_audit_log.py",
|
|
439
441
|
"tests/test_audit_outcome.py",
|
|
@@ -760,6 +762,7 @@
|
|
|
760
762
|
"tui/Cargo.lock",
|
|
761
763
|
"tui/Cargo.toml",
|
|
762
764
|
"tui/cargo-config-local-quadraui.toml.example",
|
|
765
|
+
"tui/src/app/approved.rs",
|
|
763
766
|
"tui/src/app/audit.rs",
|
|
764
767
|
"tui/src/app/chat.rs",
|
|
765
768
|
"tui/src/app/data.rs",
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"""``/board``'s ``approved_submissions`` block — the "Approved work items"
|
|
2
|
+
panel's data source (#2532, ms-67 contract §5).
|
|
3
|
+
|
|
4
|
+
**Why this is server-side.** The TUI is a thin client: it renders what
|
|
5
|
+
``coord serve`` computes and never reads ``coordinator.yml`` or the local
|
|
6
|
+
SQLite DB itself (#2336). The portal bridge's tables live on the *daemon
|
|
7
|
+
host* and are canonical only there (:mod:`coord.portal_store`'s module doc),
|
|
8
|
+
so a client that read them locally would show an empty panel on every
|
|
9
|
+
machine that is not the daemon — which is exactly the failure mode #2532's
|
|
10
|
+
issue body calls out. Everything this module resolves — which submissions
|
|
11
|
+
are approved, which repos their project maps to, how the timestamp is
|
|
12
|
+
spelled — is therefore decided here and shipped as plain JSON.
|
|
13
|
+
|
|
14
|
+
**What "approved" means today.** A submission whose most recent sign-off
|
|
15
|
+
event carries an ``approved`` verdict. Nothing coord-side consumes those
|
|
16
|
+
events (:func:`coord.portal_sync._consume_verdicts` deliberately leaves an
|
|
17
|
+
``approved`` verdict unhandled pending #2509's policy question), so they
|
|
18
|
+
accumulate as exactly the FIFO backlog the panel exists to work through.
|
|
19
|
+
A later ``changes_requested`` on the same submission takes it back off the
|
|
20
|
+
list — last verdict wins, not "was ever approved".
|
|
21
|
+
|
|
22
|
+
**Field-name honesty (contract §6.9).** coord-portal's submission schema
|
|
23
|
+
lives in a separate repo that is not visible from here, so the intake fields
|
|
24
|
+
(outcome / audience / done-definition / constraints, plus client and project
|
|
25
|
+
identity) are read out of the read-only customer mirror
|
|
26
|
+
(``portal_submissions.customer_json``, which
|
|
27
|
+
:func:`coord.portal_sync._mirror_event` fills with whatever the portal sent
|
|
28
|
+
minus coord-owned keys) under the contract's own key spelling, with the
|
|
29
|
+
camelCase variant accepted as an alias because the portal is a TypeScript
|
|
30
|
+
worker. A field the portal never sent renders as an empty string — the panel
|
|
31
|
+
shows a blank cell, it does not omit the row or crash. If coord-portal's
|
|
32
|
+
real spelling turns out to be something else entirely, this alias table is
|
|
33
|
+
the one place to correct it.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
from __future__ import annotations
|
|
37
|
+
|
|
38
|
+
from datetime import datetime, timezone
|
|
39
|
+
from typing import TYPE_CHECKING, Any
|
|
40
|
+
|
|
41
|
+
if TYPE_CHECKING: # pragma: no cover - typing only
|
|
42
|
+
from coord.config import Config
|
|
43
|
+
|
|
44
|
+
#: The wire keys :class:`ApprovedSubmission` (``tui/src/app/types.rs``)
|
|
45
|
+
#: deserializes without ``#[serde(default)]``, i.e. the ones this module must
|
|
46
|
+
#: always emit even when the mirror has nothing for them.
|
|
47
|
+
_TEXT_FIELD_ALIASES: dict[str, tuple[str, ...]] = {
|
|
48
|
+
"client": ("client", "client_name", "clientName"),
|
|
49
|
+
"project_id": ("project_id", "projectId"),
|
|
50
|
+
"project_label": ("project_label", "projectLabel"),
|
|
51
|
+
"outcome": ("outcome",),
|
|
52
|
+
"audience": ("audience",),
|
|
53
|
+
"done_definition": ("done_definition", "doneDefinition"),
|
|
54
|
+
"constraints": ("constraints",),
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _first_str(mirror: dict[str, Any], keys: tuple[str, ...]) -> str:
|
|
59
|
+
"""The first non-blank string *mirror* has under *keys*, else ``""``.
|
|
60
|
+
|
|
61
|
+
Non-string values (a number, a nested object the portal decided to send)
|
|
62
|
+
are stringified rather than dropped: a rendered-but-odd cell is easier to
|
|
63
|
+
diagnose from the panel than a silently blank one.
|
|
64
|
+
"""
|
|
65
|
+
for key in keys:
|
|
66
|
+
value = mirror.get(key)
|
|
67
|
+
if isinstance(value, str):
|
|
68
|
+
if value.strip():
|
|
69
|
+
return value.strip()
|
|
70
|
+
elif value is not None and not isinstance(value, (list, dict, bool)):
|
|
71
|
+
return str(value)
|
|
72
|
+
return ""
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _iso8601(epoch: Any) -> str:
|
|
76
|
+
"""``first_seen_at`` (a float epoch) as ``YYYY-MM-DDTHH:MM:SSZ``.
|
|
77
|
+
|
|
78
|
+
The TUI keeps this as a raw string and parses it defensively, so a bad
|
|
79
|
+
value must degrade to ``""`` rather than raise — a submission with an
|
|
80
|
+
unreadable timestamp still belongs on the list.
|
|
81
|
+
"""
|
|
82
|
+
try:
|
|
83
|
+
stamp = float(epoch)
|
|
84
|
+
except (TypeError, ValueError):
|
|
85
|
+
return ""
|
|
86
|
+
try:
|
|
87
|
+
return (
|
|
88
|
+
datetime.fromtimestamp(stamp, tz=timezone.utc)
|
|
89
|
+
.strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
90
|
+
)
|
|
91
|
+
except (OverflowError, OSError, ValueError):
|
|
92
|
+
return ""
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def approved_submission_ids() -> set[str]:
|
|
96
|
+
"""Submission ids whose LATEST sign-off verdict is ``approved``.
|
|
97
|
+
|
|
98
|
+
Folds :func:`coord.portal_store.signoff_events` (oldest first) into one
|
|
99
|
+
verdict per submission, so a walked-back approval drops out. Reuses
|
|
100
|
+
:mod:`coord.portal_sync`'s own verdict readers rather than re-deriving
|
|
101
|
+
them: the portal's sign-off event shape is not fully pinned down, and two
|
|
102
|
+
independent guesses at it would drift.
|
|
103
|
+
"""
|
|
104
|
+
from coord import portal_store # noqa: PLC0415 — avoid import cycle
|
|
105
|
+
from coord.portal_sync import ( # noqa: PLC0415
|
|
106
|
+
_normalize_verdict,
|
|
107
|
+
_signoff_verdict,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
latest: dict[str, str] = {}
|
|
111
|
+
for event in portal_store.signoff_events():
|
|
112
|
+
submission_id = (event.submission_id or "").strip()
|
|
113
|
+
if not submission_id:
|
|
114
|
+
continue
|
|
115
|
+
verdict = _signoff_verdict(event)
|
|
116
|
+
if verdict is None:
|
|
117
|
+
continue
|
|
118
|
+
latest[submission_id] = _normalize_verdict(verdict)
|
|
119
|
+
return {sid for sid, verdict in latest.items() if verdict == "approved"}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def approved_submissions(config: "Config") -> list[dict[str, Any]]:
|
|
123
|
+
"""The ``/board`` ``approved_submissions`` payload, **oldest first**.
|
|
124
|
+
|
|
125
|
+
Oldest-first is the panel's contract (§3c: a FIFO backlog, the longest
|
|
126
|
+
unactioned sign-off at the top) and comes for free from
|
|
127
|
+
:func:`coord.portal_store.list_submissions`' own
|
|
128
|
+
``first_seen_at ASC, submission_id ASC`` ordering — the tie-break matters
|
|
129
|
+
because a pull page can land several submissions on the same stamp.
|
|
130
|
+
|
|
131
|
+
``repos`` is resolved here via
|
|
132
|
+
:meth:`coord.config.PortalConfig.repos_for_project`; an unmapped project
|
|
133
|
+
yields ``[]``, which the panel renders as "— no mapping —". That is a
|
|
134
|
+
normal state, not an error, so it never suppresses the row: an operator
|
|
135
|
+
who cannot see the unmapped submission cannot know to map it.
|
|
136
|
+
"""
|
|
137
|
+
from coord import portal_store # noqa: PLC0415 — avoid import cycle
|
|
138
|
+
|
|
139
|
+
approved = approved_submission_ids()
|
|
140
|
+
if not approved:
|
|
141
|
+
return []
|
|
142
|
+
|
|
143
|
+
portal = getattr(config, "portal", None)
|
|
144
|
+
rows: list[dict[str, Any]] = []
|
|
145
|
+
for record in portal_store.list_submissions():
|
|
146
|
+
if record.submission_id not in approved:
|
|
147
|
+
continue
|
|
148
|
+
mirror = record.customer if isinstance(record.customer, dict) else {}
|
|
149
|
+
row: dict[str, Any] = {"submission_id": record.submission_id}
|
|
150
|
+
for wire_key, aliases in _TEXT_FIELD_ALIASES.items():
|
|
151
|
+
row[wire_key] = _first_str(mirror, aliases)
|
|
152
|
+
row["repos"] = (
|
|
153
|
+
portal.repos_for_project(row["project_id"]) if portal is not None else []
|
|
154
|
+
)
|
|
155
|
+
row["received_at"] = _iso8601(record.first_seen_at)
|
|
156
|
+
rows.append(row)
|
|
157
|
+
return rows
|
|
@@ -1787,6 +1787,21 @@ class NotificationsConfig:
|
|
|
1787
1787
|
cold_ceiling_mins: dict[str, float] = field(default_factory=dict)
|
|
1788
1788
|
|
|
1789
1789
|
|
|
1790
|
+
@dataclass(frozen=True)
|
|
1791
|
+
class PortalProjectRepo:
|
|
1792
|
+
"""One portal-project → coord-repo(s) mapping (ms-67 contract §2).
|
|
1793
|
+
|
|
1794
|
+
``project_id`` is the portal's own opaque identifier: coord never mints
|
|
1795
|
+
one and never validates its *shape*, only that it is non-empty and
|
|
1796
|
+
declared at most once. ``repos`` must each name a configured
|
|
1797
|
+
``repos[].name`` — the same cross-reference posture
|
|
1798
|
+
:func:`_validate_dependencies` already applies to ``depends_on``.
|
|
1799
|
+
"""
|
|
1800
|
+
|
|
1801
|
+
project_id: str
|
|
1802
|
+
repos: list[str]
|
|
1803
|
+
|
|
1804
|
+
|
|
1790
1805
|
@dataclass
|
|
1791
1806
|
class PortalConfig:
|
|
1792
1807
|
"""The outbound client to coord-portal's sync bridge (#2179, ``docs/CUSTOMER_PORTAL.md``).
|
|
@@ -1820,6 +1835,28 @@ class PortalConfig:
|
|
|
1820
1835
|
# coord.portal_bridge.PortalBridgeClient. A 401 never retries: a bad
|
|
1821
1836
|
# credential does not become a good one on attempt two.
|
|
1822
1837
|
max_retries: int = 2
|
|
1838
|
+
# ms-67 contract §2: portal project ↔ coord repo(s). Absent == nothing
|
|
1839
|
+
# mapped == every lookup returns [], which the "Approved work items"
|
|
1840
|
+
# panel renders as its literal "— no mapping —" placeholder rather than
|
|
1841
|
+
# a blank cell. Mapping is *operator* knowledge (which repo a client's
|
|
1842
|
+
# project lands in), so it lives here and not in the portal's schema.
|
|
1843
|
+
project_repos: list[PortalProjectRepo] = field(default_factory=list)
|
|
1844
|
+
|
|
1845
|
+
def repos_for_project(self, project_id: str) -> list[str]:
|
|
1846
|
+
"""The coord repo name(s) *project_id* maps to — ``[]`` if unmapped.
|
|
1847
|
+
|
|
1848
|
+
**Never raises.** An unmapped project is a valid, common state (a
|
|
1849
|
+
brand-new portal project the operator has not routed yet), not an
|
|
1850
|
+
error: the caller renders "no mapping", it does not fail. Returns a
|
|
1851
|
+
fresh list so a caller cannot mutate the parsed config.
|
|
1852
|
+
"""
|
|
1853
|
+
wanted = (project_id or "").strip()
|
|
1854
|
+
if not wanted:
|
|
1855
|
+
return []
|
|
1856
|
+
for entry in self.project_repos:
|
|
1857
|
+
if entry.project_id == wanted:
|
|
1858
|
+
return list(entry.repos)
|
|
1859
|
+
return []
|
|
1823
1860
|
|
|
1824
1861
|
|
|
1825
1862
|
@dataclass
|
|
@@ -1920,7 +1957,7 @@ def parse_mapping(raw: Any, *, path: Path | None = None) -> Config:
|
|
|
1920
1957
|
pricing = _parse_pricing(raw.get("pricing"))
|
|
1921
1958
|
health = _parse_health(raw.get("health"))
|
|
1922
1959
|
notifications = _parse_notifications(raw.get("notifications"))
|
|
1923
|
-
portal = _parse_portal(raw.get("portal"))
|
|
1960
|
+
portal = _parse_portal(raw.get("portal"), {r.name for r in repos})
|
|
1924
1961
|
|
|
1925
1962
|
return Config(
|
|
1926
1963
|
repos=repos,
|
|
@@ -3498,12 +3535,18 @@ _PORTAL_PLAIN_STR_FIELDS = ("base_url",)
|
|
|
3498
3535
|
_PORTAL_SECRET_STR_FIELDS = ("bridge_client_id", "bridge_client_secret")
|
|
3499
3536
|
|
|
3500
3537
|
|
|
3501
|
-
def _parse_portal(raw: Any) -> PortalConfig:
|
|
3538
|
+
def _parse_portal(raw: Any, repo_names: set[str] | None = None) -> PortalConfig:
|
|
3502
3539
|
"""Parse the optional ``portal:`` block from coordinator.yml (#2179).
|
|
3503
3540
|
|
|
3504
3541
|
An absent block returns a **disabled** :class:`PortalConfig` — unchanged
|
|
3505
3542
|
behaviour for every existing deployment, and the correct default until
|
|
3506
3543
|
``BRIDGE_CLIENT_ID``/``BRIDGE_CLIENT_SECRET`` exist in production.
|
|
3544
|
+
|
|
3545
|
+
*repo_names* (ms-67 contract §2) is the set of configured ``repos[].name``
|
|
3546
|
+
that ``project_repos[*].repos`` entries are cross-checked against, the
|
|
3547
|
+
same way ``reviews.repo_overrides`` already is. ``None`` skips that one
|
|
3548
|
+
check (for callers that parse the block in isolation); every other
|
|
3549
|
+
validation still applies.
|
|
3507
3550
|
"""
|
|
3508
3551
|
if raw is None:
|
|
3509
3552
|
return PortalConfig()
|
|
@@ -3561,6 +3604,9 @@ def _parse_portal(raw: Any) -> PortalConfig:
|
|
|
3561
3604
|
raise ConfigError("portal.max_retries must be a non-negative integer")
|
|
3562
3605
|
cfg.max_retries = value
|
|
3563
3606
|
|
|
3607
|
+
if "project_repos" in raw:
|
|
3608
|
+
cfg.project_repos = _parse_portal_project_repos(raw["project_repos"], repo_names)
|
|
3609
|
+
|
|
3564
3610
|
if cfg.enabled and not (cfg.base_url and cfg.bridge_client_id and cfg.bridge_client_secret):
|
|
3565
3611
|
# Half a credential is not a credential — coord-portal's
|
|
3566
3612
|
# isBridgeAuthorized takes the identical position and fails closed on
|
|
@@ -3573,6 +3619,64 @@ def _parse_portal(raw: Any) -> PortalConfig:
|
|
|
3573
3619
|
return cfg
|
|
3574
3620
|
|
|
3575
3621
|
|
|
3622
|
+
def _parse_portal_project_repos(
|
|
3623
|
+
raw: Any, repo_names: set[str] | None
|
|
3624
|
+
) -> list[PortalProjectRepo]:
|
|
3625
|
+
"""Parse ``portal.project_repos`` (ms-67 contract §2).
|
|
3626
|
+
|
|
3627
|
+
Rejects at LOAD, never at use — the same posture every other
|
|
3628
|
+
``portal.*`` field takes, and the reason
|
|
3629
|
+
:meth:`PortalConfig.repos_for_project` can promise never to raise.
|
|
3630
|
+
"""
|
|
3631
|
+
if raw is None:
|
|
3632
|
+
return []
|
|
3633
|
+
if not isinstance(raw, list):
|
|
3634
|
+
raise ConfigError("portal.project_repos must be a list of mappings")
|
|
3635
|
+
|
|
3636
|
+
parsed: list[PortalProjectRepo] = []
|
|
3637
|
+
seen: set[str] = set()
|
|
3638
|
+
for i, entry in enumerate(raw):
|
|
3639
|
+
if not isinstance(entry, dict):
|
|
3640
|
+
raise ConfigError(f"portal.project_repos[{i}] must be a mapping")
|
|
3641
|
+
unknown = sorted(set(entry) - {"project_id", "repos"})
|
|
3642
|
+
if unknown:
|
|
3643
|
+
raise ConfigError(
|
|
3644
|
+
f"unknown portal.project_repos[{i}] option(s): {', '.join(unknown)} "
|
|
3645
|
+
"(valid: project_id, repos)"
|
|
3646
|
+
)
|
|
3647
|
+
project_id = entry.get("project_id")
|
|
3648
|
+
if not isinstance(project_id, str) or not project_id.strip():
|
|
3649
|
+
raise ConfigError(
|
|
3650
|
+
f"portal.project_repos[{i}].project_id must be a non-empty string"
|
|
3651
|
+
)
|
|
3652
|
+
project_id = project_id.strip()
|
|
3653
|
+
if project_id in seen:
|
|
3654
|
+
raise ConfigError(
|
|
3655
|
+
f"portal.project_repos has duplicate project_id {project_id!r}"
|
|
3656
|
+
)
|
|
3657
|
+
seen.add(project_id)
|
|
3658
|
+
|
|
3659
|
+
repos_raw = entry.get("repos")
|
|
3660
|
+
if (
|
|
3661
|
+
not isinstance(repos_raw, list)
|
|
3662
|
+
or not repos_raw
|
|
3663
|
+
or not all(isinstance(r, str) and r.strip() for r in repos_raw)
|
|
3664
|
+
):
|
|
3665
|
+
raise ConfigError(
|
|
3666
|
+
f"portal.project_repos[{i}].repos must be a non-empty list of repo names"
|
|
3667
|
+
)
|
|
3668
|
+
repos = [r.strip() for r in repos_raw]
|
|
3669
|
+
if repo_names is not None:
|
|
3670
|
+
unknown_repos = [r for r in repos if r not in repo_names]
|
|
3671
|
+
if unknown_repos:
|
|
3672
|
+
raise ConfigError(
|
|
3673
|
+
f"portal.project_repos[{i}] ({project_id}) references unknown "
|
|
3674
|
+
f"repos: {unknown_repos}"
|
|
3675
|
+
)
|
|
3676
|
+
parsed.append(PortalProjectRepo(project_id=project_id, repos=repos))
|
|
3677
|
+
return parsed
|
|
3678
|
+
|
|
3679
|
+
|
|
3576
3680
|
def _parse_providers(raw: Any) -> ProvidersConfig:
|
|
3577
3681
|
"""Parse the optional ``providers:`` block from coordinator.yml.
|
|
3578
3682
|
|
{code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-drive-queue.service
RENAMED
|
@@ -101,6 +101,34 @@ Wants=network-online.target
|
|
|
101
101
|
[Service]
|
|
102
102
|
Type=oneshot
|
|
103
103
|
KillMode=process
|
|
104
|
+
# #2532: WITHOUT this line the tick inherits the systemd *user manager's*
|
|
105
|
+
# PATH (`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
|
|
106
|
+
# /usr/games:/usr/local/games:/snap/bin`), which does NOT contain
|
|
107
|
+
# `~/.cargo/bin` — and rustup installs `cargo` nowhere else. That matters
|
|
108
|
+
# because this tick launches `coord drive`, which runs the oracle-loop trust
|
|
109
|
+
# gate `coord acceptance record` IN-PROCESS on this host, which shells out to
|
|
110
|
+
# the repo's acceptance driver command. For claude-coordinator's `tui/**`
|
|
111
|
+
# route (and quadraui's, and every future cargo-based sealed suite) that
|
|
112
|
+
# command starts with `cargo`, so it exited 127 `cargo: not found` with EMPTY
|
|
113
|
+
# stdout. `coord.acceptance_drivers.run_driver` folds a non-zero exit into
|
|
114
|
+
# its result rather than raising, so zero parsed verdicts became
|
|
115
|
+
# `total=0/passed=0/green=false` and the board recorded a *false red* trust
|
|
116
|
+
# gate with an empty reason string — indistinguishable, from every operator
|
|
117
|
+
# surface, from the worker's code genuinely failing the sealed suite. It cost
|
|
118
|
+
# #2532 a full fix-round dispatch against a branch whose 22 acceptance tests
|
|
119
|
+
# were green the whole time.
|
|
120
|
+
#
|
|
121
|
+
# Ordering mirrors the sibling units on this same host that already got this
|
|
122
|
+
# right (deploy/coord-serve.service, deploy/coord-agent.service,
|
|
123
|
+
# deploy/coord-web-dist-build.service): the pinned `~/.coord-venv/bin` first
|
|
124
|
+
# so nothing can shadow the release that is driving the fleet, then
|
|
125
|
+
# `~/.cargo/bin`, then `~/.local/bin`. NO `.venv/bin` entry appears at all —
|
|
126
|
+
# the #1831 `unit_drift` health check flags any unit whose PATH puts an
|
|
127
|
+
# editable repo checkout ahead of `~/.local/bin` / `~/.coord-venv/bin`.
|
|
128
|
+
# Everything the user manager's default PATH carried (tmux, git, gh, and
|
|
129
|
+
# /snap/bin) is preserved below, so this is a strict superset of what the
|
|
130
|
+
# tick could reach before — nothing it currently finds can go missing.
|
|
131
|
+
Environment=PATH=%h/.coord-venv/bin:%h/.cargo/bin:%h/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
|
|
104
132
|
# --max-parallel 4 (#2012, raised from 3 in #2057) — the global ceiling,
|
|
105
133
|
# ONE SLOT PER REPO IN THE FLEET: claude-coordinator, quadraui, vimcode,
|
|
106
134
|
# coord-portal. It was 3 because the fleet had three repos when #2012 set
|
|
@@ -206,6 +206,34 @@ def unhandled_events(limit: int = 100) -> list[PortalEvent]:
|
|
|
206
206
|
return [_event_from_row(r) for r in rows]
|
|
207
207
|
|
|
208
208
|
|
|
209
|
+
def signoff_events() -> list[PortalEvent]:
|
|
210
|
+
"""Every sign-off event in the inbox, **oldest first** (#2532).
|
|
211
|
+
|
|
212
|
+
Deliberately unfiltered by ``handled_at``: an ``approved`` verdict is
|
|
213
|
+
never marked handled by anything today (see :func:`coord.portal_sync.
|
|
214
|
+
_consume_verdicts` — it advances its own watermark past one without
|
|
215
|
+
claiming it), so a ``handled_at IS NULL`` filter would be a no-op that
|
|
216
|
+
silently becomes wrong the day #2509 decides to consume them.
|
|
217
|
+
|
|
218
|
+
Oldest-first is what makes "the LATEST verdict wins" a plain
|
|
219
|
+
last-write-wins fold in the caller: a submission approved and then
|
|
220
|
+
walked back with ``changes_requested`` must not still read as approved.
|
|
221
|
+
|
|
222
|
+
Matching is on ``kind`` alone (``signoff`` / ``signoff.*``) — the same
|
|
223
|
+
prefix test :func:`coord.portal_sync._signoff_verdict` applies before it
|
|
224
|
+
looks at the payload — so this stays a cheap indexed-ish scan and the
|
|
225
|
+
verdict-shape guesswork lives in exactly one place.
|
|
226
|
+
"""
|
|
227
|
+
rows = _conn().execute(
|
|
228
|
+
"""
|
|
229
|
+
SELECT * FROM portal_events
|
|
230
|
+
WHERE kind = 'signoff' OR kind LIKE 'signoff.%'
|
|
231
|
+
ORDER BY received_at ASC, rowid ASC
|
|
232
|
+
"""
|
|
233
|
+
).fetchall()
|
|
234
|
+
return [_event_from_row(r) for r in rows]
|
|
235
|
+
|
|
236
|
+
|
|
209
237
|
def events_after_verdict_watermark(
|
|
210
238
|
received_at: float, rowid: int, *, limit: int = 100
|
|
211
239
|
) -> list[tuple[int, PortalEvent]]:
|
|
@@ -4100,6 +4100,23 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
|
|
|
4100
4100
|
# key is structurally unreachable from any of them — see
|
|
4101
4101
|
# tests/test_health_advisory_only.py.
|
|
4102
4102
|
projection["fleet_health"] = _fleet_health_refresher.snapshot().to_dict()
|
|
4103
|
+
# #2532 (ms-67 contract §5): portal submissions the client has
|
|
4104
|
+
# signed off on and that are waiting to be decomposed into
|
|
4105
|
+
# coordinator work. Computed HERE, on the daemon host, because
|
|
4106
|
+
# the portal bridge's SQLite tables are canonical only here
|
|
4107
|
+
# (coord/portal_store.py's module doc) and the `repos` column is
|
|
4108
|
+
# resolved from `coordinator.yml` (#2531's project↔repo map),
|
|
4109
|
+
# which a thin client never reads (#2336). Same fail-open,
|
|
4110
|
+
# sibling-key posture as `fleet_health` above: an empty list is a
|
|
4111
|
+
# legitimate answer ("nothing approved yet"), so no error here
|
|
4112
|
+
# may 503 the board or blank an otherwise-good projection.
|
|
4113
|
+
try:
|
|
4114
|
+
from coord.approved_work import ( # noqa: PLC0415
|
|
4115
|
+
approved_submissions as _approved_submissions,
|
|
4116
|
+
)
|
|
4117
|
+
projection["approved_submissions"] = _approved_submissions(_cfg)
|
|
4118
|
+
except Exception: # noqa: BLE001 — advisory panel, never fatal
|
|
4119
|
+
projection["approved_submissions"] = []
|
|
4103
4120
|
try:
|
|
4104
4121
|
from coord import merge_queue as _mq # noqa: PLC0415
|
|
4105
4122
|
from coord.state import build_board as _build_board # noqa: PLC0415
|
|
@@ -101,6 +101,34 @@ Wants=network-online.target
|
|
|
101
101
|
[Service]
|
|
102
102
|
Type=oneshot
|
|
103
103
|
KillMode=process
|
|
104
|
+
# #2532: WITHOUT this line the tick inherits the systemd *user manager's*
|
|
105
|
+
# PATH (`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
|
|
106
|
+
# /usr/games:/usr/local/games:/snap/bin`), which does NOT contain
|
|
107
|
+
# `~/.cargo/bin` — and rustup installs `cargo` nowhere else. That matters
|
|
108
|
+
# because this tick launches `coord drive`, which runs the oracle-loop trust
|
|
109
|
+
# gate `coord acceptance record` IN-PROCESS on this host, which shells out to
|
|
110
|
+
# the repo's acceptance driver command. For claude-coordinator's `tui/**`
|
|
111
|
+
# route (and quadraui's, and every future cargo-based sealed suite) that
|
|
112
|
+
# command starts with `cargo`, so it exited 127 `cargo: not found` with EMPTY
|
|
113
|
+
# stdout. `coord.acceptance_drivers.run_driver` folds a non-zero exit into
|
|
114
|
+
# its result rather than raising, so zero parsed verdicts became
|
|
115
|
+
# `total=0/passed=0/green=false` and the board recorded a *false red* trust
|
|
116
|
+
# gate with an empty reason string — indistinguishable, from every operator
|
|
117
|
+
# surface, from the worker's code genuinely failing the sealed suite. It cost
|
|
118
|
+
# #2532 a full fix-round dispatch against a branch whose 22 acceptance tests
|
|
119
|
+
# were green the whole time.
|
|
120
|
+
#
|
|
121
|
+
# Ordering mirrors the sibling units on this same host that already got this
|
|
122
|
+
# right (deploy/coord-serve.service, deploy/coord-agent.service,
|
|
123
|
+
# deploy/coord-web-dist-build.service): the pinned `~/.coord-venv/bin` first
|
|
124
|
+
# so nothing can shadow the release that is driving the fleet, then
|
|
125
|
+
# `~/.cargo/bin`, then `~/.local/bin`. NO `.venv/bin` entry appears at all —
|
|
126
|
+
# the #1831 `unit_drift` health check flags any unit whose PATH puts an
|
|
127
|
+
# editable repo checkout ahead of `~/.local/bin` / `~/.coord-venv/bin`.
|
|
128
|
+
# Everything the user manager's default PATH carried (tmux, git, gh, and
|
|
129
|
+
# /snap/bin) is preserved below, so this is a strict superset of what the
|
|
130
|
+
# tick could reach before — nothing it currently finds can go missing.
|
|
131
|
+
Environment=PATH=%h/.coord-venv/bin:%h/.cargo/bin:%h/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
|
|
104
132
|
# --max-parallel 4 (#2012, raised from 3 in #2057) — the global ceiling,
|
|
105
133
|
# ONE SLOT PER REPO IN THE FLEET: claude-coordinator, quadraui, vimcode,
|
|
106
134
|
# coord-portal. It was 3 because the fleet had three repos when #2012 set
|