code-coordinator 0.5.290__tar.gz → 0.5.291__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.290 → code_coordinator-0.5.291}/.github/workflows/test.yml +36 -10
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/PKG-INFO +1 -1
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/SOURCES.txt +1 -1
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/scm_file_list.json +1 -1
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/board_schema.py +6 -4
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/board_wire.py +2 -1
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/usage.py +3 -3
- code_coordinator-0.5.291/docs/ADR_COORD_TUI_CI.md +217 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/codegen.py +124 -45
- code_coordinator-0.5.291/tests/test_board_fixture.py +82 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_wire.py +2 -1
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dist_name.py +33 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_generated_rust_fixture.py +78 -63
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/types/generated.rs +12 -8
- code_coordinator-0.5.290/coord/board_bool_guard.py +0 -83
- code_coordinator-0.5.290/tests/test_board_fixture.py +0 -172
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.gitignore +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/CLAUDE.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/GOAL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/LICENSE +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/MANIFEST.in +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/README.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/__init__.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agent.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/audit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/block_log.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/board_service.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/brain.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/claim.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/cli.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/client.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/comments.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/config.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dao.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/db.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deps.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/drive.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/events.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/filelock.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/freshness.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/gates.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/goal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/context.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/models.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/render.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/units.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/hooks.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/interactive.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/models.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/network.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notify.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/openapi.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/parentage.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/plans.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/progress.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/release_window.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/reports.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/review.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/self_health.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/smoke.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/split_work.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/sql.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/state.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/test_author.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/test_report.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/install-agent.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/pyproject.toml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/setup.cfg +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/__init__.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/backends.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/conftest.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_db.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_events.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_init.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_models.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_network.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_session.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_split.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_state.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/write_parity.py +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -31,6 +31,17 @@ jobs:
|
|
|
31
31
|
# testpaths=["tests"]) was the one accidental gap. (ms-51 — Playwright,
|
|
32
32
|
# never .py either — left this repo entirely with the webapp, #2009.)
|
|
33
33
|
- run: pytest --ignore=tests/acceptance
|
|
34
|
+
# #2897: the Rust drift gate `tests/test_generated_rust_fixture.py`
|
|
35
|
+
# no longer byte-compares the committed `tui/src/app/types/generated.rs`
|
|
36
|
+
# (see docs/ADR_COORD_TUI_CI.md and the header comment further down
|
|
37
|
+
# this file) — this explicit step stands in for that comparison while
|
|
38
|
+
# `tui/` still lives here. `$COORD_TUI_SRC=.` names this checkout as
|
|
39
|
+
# the coord-tui root (`RUST_OUTPUT_RELPATH` keeps the `tui/` prefix for
|
|
40
|
+
# exactly this reason). One matrix leg only: the generator's output
|
|
41
|
+
# depends on `coord.serve_app.openapi_spec()`, not the Python version.
|
|
42
|
+
- name: python scripts/codegen.py --rust --check
|
|
43
|
+
if: matrix.python-version == '3.12'
|
|
44
|
+
run: COORD_TUI_SRC=. python scripts/codegen.py --rust --check
|
|
34
45
|
# #2180: the cli-pytest sealed route (acceptance.drivers routes
|
|
35
46
|
# "coord/**" -> cli-pytest -> tests/acceptance/ms-37) run through the
|
|
36
47
|
# #2164 CI wrapper instead of a raw `pytest tests/acceptance` call, so
|
|
@@ -310,16 +321,31 @@ jobs:
|
|
|
310
321
|
# for it to run against, and a job that installs Node to build nothing is
|
|
311
322
|
# how the previous `acceptance`-on-every-push waste (#2389) started.
|
|
312
323
|
#
|
|
313
|
-
# #1941: `scripts/codegen.py` also generates coord-tui's RUST wire
|
|
314
|
-
# (`--rust`)
|
|
315
|
-
#
|
|
316
|
-
#
|
|
317
|
-
#
|
|
318
|
-
#
|
|
319
|
-
#
|
|
320
|
-
#
|
|
321
|
-
#
|
|
322
|
-
#
|
|
324
|
+
# #1941/#2897: `scripts/codegen.py` also generates coord-tui's RUST wire
|
|
325
|
+
# types (`--rust`). #2897 gave that half the SAME cross-repo shape as the
|
|
326
|
+
# TS half above (`--out PATH` / `$COORD_TUI_SRC`, no fallback default,
|
|
327
|
+
# docs/ADR_COORD_TUI_CI.md) — but `tui/` has not actually moved out of
|
|
328
|
+
# this repo yet, so unlike the TS byte-comparison (which is now
|
|
329
|
+
# exclusively `coord-web`'s CI job), the Rust byte-comparison has nowhere
|
|
330
|
+
# else to run yet and stays HERE, as an explicit step below rather than a
|
|
331
|
+
# pytest test:
|
|
332
|
+
#
|
|
333
|
+
# COORD_TUI_SRC=. python scripts/codegen.py --rust --check
|
|
334
|
+
#
|
|
335
|
+
# `tests/test_generated_rust_fixture.py` itself is narrowed to what one
|
|
336
|
+
# checkout can prove — the generator runs and covers every schema — same
|
|
337
|
+
# as `tests/test_generated_types_fixture.py`; it no longer byte-compares
|
|
338
|
+
# the committed `tui/src/app/types/generated.rs`. The day coord-tui gets
|
|
339
|
+
# its own checkout + CI, delete the step below (its replacement lives in
|
|
340
|
+
# that CI, installing `code-coordinator[server]` from PyPI exactly as
|
|
341
|
+
# `coord-web`'s does) — no pytest file to un-narrow.
|
|
342
|
+
#
|
|
343
|
+
# The consumer-side INTEGER-backed-bool text-scraping guard
|
|
344
|
+
# (`coord/board_bool_guard.py`) that used to also read Rust source text
|
|
345
|
+
# here is RETIRED as of #2897, not moved — see docs/ADR_COORD_TUI_CI.md:
|
|
346
|
+
# #2895 (Phase 1 of #2894) deleted coord-tui's last direct SQL reader, so
|
|
347
|
+
# `tests/test_board_schema.py`'s DTO-level assertions are now the sole
|
|
348
|
+
# guard against that class.
|
|
323
349
|
|
|
324
350
|
# #2886: a real Postgres 16 service, so `coord/sql.py`'s Postgres branches
|
|
325
351
|
# (paramstyle translation, upsert idioms, `information_schema`
|
|
@@ -39,7 +39,6 @@ coord/approved_work.py
|
|
|
39
39
|
coord/audit.py
|
|
40
40
|
coord/auto_loop.py
|
|
41
41
|
coord/block_log.py
|
|
42
|
-
coord/board_bool_guard.py
|
|
43
42
|
coord/board_schema.py
|
|
44
43
|
coord/board_service.py
|
|
45
44
|
coord/board_wire.py
|
|
@@ -296,6 +295,7 @@ deploy/coord-web-dist-build.timer
|
|
|
296
295
|
deploy/coord-web-rollback.sh
|
|
297
296
|
deploy/coord-web.service
|
|
298
297
|
deploy/node-shim.sh
|
|
298
|
+
docs/ADR_COORD_TUI_CI.md
|
|
299
299
|
docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md
|
|
300
300
|
docs/ADR_COORD_WEB_CI.md
|
|
301
301
|
docs/ADR_COORD_WEB_DIST.md
|
{code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
"coord/audit.py",
|
|
34
34
|
"coord/auto_loop.py",
|
|
35
35
|
"coord/block_log.py",
|
|
36
|
-
"coord/board_bool_guard.py",
|
|
37
36
|
"coord/board_schema.py",
|
|
38
37
|
"coord/board_service.py",
|
|
39
38
|
"coord/board_wire.py",
|
|
@@ -288,6 +287,7 @@
|
|
|
288
287
|
"deploy/coord-web-rollback.sh",
|
|
289
288
|
"deploy/coord-web.service",
|
|
290
289
|
"deploy/node-shim.sh",
|
|
290
|
+
"docs/ADR_COORD_TUI_CI.md",
|
|
291
291
|
"docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md",
|
|
292
292
|
"docs/ADR_COORD_WEB_CI.md",
|
|
293
293
|
"docs/ADR_COORD_WEB_DIST.md",
|
|
@@ -287,10 +287,12 @@ BOARD_PROJECTIONS: dict[str, type] = {
|
|
|
287
287
|
#: therefore ship as ``0``/``1``. Their DTO fields are annotated ``int`` on
|
|
288
288
|
#: purpose; ``tests/test_board_schema.py`` asserts the generated JSON Schema
|
|
289
289
|
#: types them ``integer`` and never ``boolean``, so the wire shape survives a
|
|
290
|
-
#: storage-engine swap (Postgres would make these real ``BOOLEAN``s). This
|
|
291
|
-
#: the DTO-level counterpart of ``coord/board_bool_guard.py``'s consumer-
|
|
292
|
-
#: check against the real Rust wire structs (``tui/src/app/types.rs``
|
|
293
|
-
#:
|
|
290
|
+
#: storage-engine swap (Postgres would make these real ``BOOLEAN``s). This
|
|
291
|
+
#: WAS the DTO-level counterpart of ``coord/board_bool_guard.py``'s consumer-
|
|
292
|
+
#: side check against the real Rust wire structs (``tui/src/app/types.rs``
|
|
293
|
+
#: and its generated ``types/generated.rs`` sibling, #1941); that
|
|
294
|
+
#: text-scraping check is retired as of #2897 (docs/ADR_COORD_TUI_CI.md) —
|
|
295
|
+
#: this assertion is now the sole remaining guard.
|
|
294
296
|
INTEGER_BACKED_BOOLEANS: frozenset[str] = frozenset(
|
|
295
297
|
{"is_interactive", "review_scoped", "hold_after", "no_acceptance"}
|
|
296
298
|
)
|
|
@@ -113,7 +113,8 @@ TRUNCATION_NOTICE = "\n… [truncated on the /board wire — full text: detail e
|
|
|
113
113
|
# two: `coord/**` and `tui/**`). Lines carrying it survive the body cut; see
|
|
114
114
|
# `_machine_readable_residue`. Kept in sync with the Rust side by
|
|
115
115
|
# tests/test_board_wire.py::test_allowed_glob_marker_matches_the_rust_parser,
|
|
116
|
-
# the same cross-language
|
|
116
|
+
# the same cross-language-guard posture the now-retired coord/board_bool_
|
|
117
|
+
# guard.py used (#2897, docs/ADR_COORD_TUI_CI.md).
|
|
117
118
|
#
|
|
118
119
|
# Measured cost of the retention: ZERO on today's live board — 0 of 781
|
|
119
120
|
# issue bodies carry the marker (the house `## Files` convention is a bare
|
|
@@ -380,9 +380,9 @@ def fetch_usage_rows(
|
|
|
380
380
|
:class:`~coord.models.Assignment` instances — the aggregator consumes the
|
|
381
381
|
daemon ``/board`` ``assignments`` shape directly, including
|
|
382
382
|
``is_interactive``, which is a real DB/wire column but (deliberately,
|
|
383
|
-
#748/#632 — see
|
|
384
|
-
|
|
385
|
-
drop it.
|
|
383
|
+
#748/#632 — see ``coord.board_schema.INTEGER_BACKED_BOOLEANS`` and
|
|
384
|
+
``tests/test_board_schema.py``) not an ``Assignment`` dataclass field, so
|
|
385
|
+
converting through ``Assignment`` would silently drop it.
|
|
386
386
|
|
|
387
387
|
Remote reads the same ``/board`` endpoint ``coord status`` polls. Local
|
|
388
388
|
reads the sqlite DB directly via ``SqliteStore.list_assignments()``
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# ADR: coord-tui's CI shape, and retiring the bool guard
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted
|
|
4
|
+
**Date:** 2026-08-28
|
|
5
|
+
**Issue:** #2897 (Phase 3 of #2894). Depends on #2895
|
|
6
|
+
([Phase 1 of #2894](#phase-1-landed-what-it-changed) — landed).
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
`tui/` has not moved out of this repo yet. What #2897 has to decide is the
|
|
11
|
+
*shape* the eventual coord-tui checkout's CI will need, so that when the move
|
|
12
|
+
does happen it does not also have to invent this from scratch — the same
|
|
13
|
+
sequencing #2009/#2006 used for the webapp (design first, in
|
|
14
|
+
[`docs/ADR_COORD_WEB_CI.md`](ADR_COORD_WEB_CI.md), move second).
|
|
15
|
+
|
|
16
|
+
Two Python gates in this repo currently read Rust source text or write to a
|
|
17
|
+
fixed, checked-in Rust path, both of which assume one checkout:
|
|
18
|
+
|
|
19
|
+
1. **The generator.** `scripts/codegen.py --rust` writes
|
|
20
|
+
`tui/src/app/types/generated.rs` — a hard-coded in-repo path, unlike its
|
|
21
|
+
TS half (`--out PATH` / `$COORD_WEB_SRC`, #2009) which already had to
|
|
22
|
+
solve this when the webapp moved to `coord-web`.
|
|
23
|
+
2. **The bool guard.** `coord/board_bool_guard.py` regex-scrapes
|
|
24
|
+
`tui/src/app/types.rs` (+ its generated sibling) for plain `bool` struct
|
|
25
|
+
fields and cross-references them against a freshly-migrated SQLite
|
|
26
|
+
schema, closing the #632/#546/#628 blank-board class: a SQLite `INTEGER`
|
|
27
|
+
column deserialized into a strict Rust `bool` fails the *entire*
|
|
28
|
+
`BoardPayload` parse the first time it is `0`. This needs **both** a Rust
|
|
29
|
+
source tree and a live DB schema — the harder half to give a cross-repo
|
|
30
|
+
shape, because after a split those two things live in different repos.
|
|
31
|
+
|
|
32
|
+
### Phase 1 landed: what it changed
|
|
33
|
+
|
|
34
|
+
#2895 (Phase 1 of #2894, landed immediately ahead of this issue) deleted
|
|
35
|
+
coord-tui's last direct SQL reader: `tui/src/app/data.rs` used to open
|
|
36
|
+
`~/.coord/coord.db` read-only and hand-roll the board projection SQL — a raw
|
|
37
|
+
column list, typed by rusqlite's own `FromSql`, entirely outside the JSON
|
|
38
|
+
wire contract. `rusqlite` is gone from `tui/Cargo.toml`; every board read now
|
|
39
|
+
goes through `coord serve`'s HTTP `/board` endpoint. That direct-SQL path
|
|
40
|
+
never actually had the #632 boolean bug (rusqlite converts an `INTEGER`
|
|
41
|
+
column to a Rust `bool` in-driver, no JSON in between) — but it meant the Rust
|
|
42
|
+
binary had two categories of "consumer of column types": the hand-rolled SQL
|
|
43
|
+
path, and the generated wire-struct path. Phase 1 leaves exactly one: the
|
|
44
|
+
generated wire structs in `tui/src/app/types/generated.rs` (+ any hand-added
|
|
45
|
+
mirror in `types.rs`), populated *only* from the `/board` JSON.
|
|
46
|
+
|
|
47
|
+
That fact is what makes the bool-guard decision below tractable now, and is
|
|
48
|
+
why this story is sequenced after Phase 1 rather than before it.
|
|
49
|
+
|
|
50
|
+
## Decision 1 — the generator: mirror the TS half exactly
|
|
51
|
+
|
|
52
|
+
`scripts/codegen.py --rust` now takes `--out PATH`, and resolves
|
|
53
|
+
`$COORD_TUI_SRC` (a checkout root whose `tui/` holds coord-tui's crate) when
|
|
54
|
+
`--out` is absent — the same two-rung resolution `resolve_output_path` already
|
|
55
|
+
gave the TS half, implemented as `resolve_rust_output_path`. **No fallback
|
|
56
|
+
default**, for the identical reason #2009 gave: silently writing a
|
|
57
|
+
hard-coded path that a future checkout no longer contains would either
|
|
58
|
+
recreate a dead directory nobody consumes, or, worse, report "up to date"
|
|
59
|
+
against a file that does not exist — wrong in exactly the direction that
|
|
60
|
+
looks like success.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# today, while tui/ still lives in this repo:
|
|
64
|
+
COORD_TUI_SRC=. python scripts/codegen.py --rust --check
|
|
65
|
+
# a real future coord-tui checkout:
|
|
66
|
+
COORD_TUI_SRC=~/src/coord-tui python scripts/codegen.py --rust
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`RUST_OUTPUT_RELPATH` keeps the `tui/` prefix (`<root>/tui/src/app/types/
|
|
70
|
+
generated.rs`), unlike the TS `OUTPUT_RELPATH` (no `webapp/` prefix) — because
|
|
71
|
+
today `$COORD_TUI_SRC` names *this* checkout, whose crate lives under `tui/`,
|
|
72
|
+
and coord-tui's own eventual root layout is the still-open "move" story's
|
|
73
|
+
decision, not this one's. If that story flattens the layout, updating one
|
|
74
|
+
constant is the entire fix.
|
|
75
|
+
|
|
76
|
+
### The drift gate splits the same way #2009 split the TS one
|
|
77
|
+
|
|
78
|
+
- **Stays here:** `tests/test_generated_rust_fixture.py`, narrowed to what
|
|
79
|
+
one checkout can prove — the generator runs, produces well-formed output
|
|
80
|
+
(no accidental rustdoc doctests, see #1941's original incident), and
|
|
81
|
+
covers every schema in the served `/board` spec. This is the exact same
|
|
82
|
+
narrowing `tests/test_generated_types_fixture.py` got in #2009.
|
|
83
|
+
- **Moves to coord-tui's CI**, once it exists: the byte-comparison of the
|
|
84
|
+
committed `generated.rs` against `generate_rust()`'s output right now —
|
|
85
|
+
`coord-web`'s equivalent already does this with
|
|
86
|
+
`python scripts/codegen.py --check --out src/api/generated.ts`. Until that
|
|
87
|
+
CI exists, `.github/workflows/test.yml`'s `test` job runs
|
|
88
|
+
`COORD_TUI_SRC=. python scripts/codegen.py --rust --check` directly as an
|
|
89
|
+
interim step (not a pytest test) — deletable in one line the day coord-tui
|
|
90
|
+
CI takes over, with zero pytest file to un-narrow.
|
|
91
|
+
|
|
92
|
+
### Which `coord` that CI installs, and why (mirrors ADR_COORD_WEB_CI.md)
|
|
93
|
+
|
|
94
|
+
Once coord-tui's CI exists and runs the byte-comparison above, it needs
|
|
95
|
+
`scripts/codegen.py` — i.e. a `coord` install — on its runner, the same
|
|
96
|
+
cross-repo-contract shape #2006 solved for `coord-web`. The answer here is
|
|
97
|
+
**identical, for the identical reasons**, not a new decision:
|
|
98
|
+
|
|
99
|
+
- **`pip install 'code-coordinator[server]'`, tracking latest, never an
|
|
100
|
+
exact pin.** `scripts/codegen.py --rust` imports `coord.serve_app`, which
|
|
101
|
+
imports Starlette at module scope — gated behind the `server` extra
|
|
102
|
+
(#1237) — so the bare distribution is not enough; `ModuleNotFoundError`
|
|
103
|
+
the moment `--rust` is used. And per [ADR_COORD_WEB_CI](ADR_COORD_WEB_CI.md)
|
|
104
|
+
part 1, an exact pin answers "does this compile against the coord we froze
|
|
105
|
+
in March", not "does this compile against the coord people actually have"
|
|
106
|
+
— the wrong question, answered green while a real drift ships.
|
|
107
|
+
- **`code-coordinator`, never the `claude-coordinator` tombstone** (#2106) —
|
|
108
|
+
same trap, same fix, see that ADR's part 2.
|
|
109
|
+
- A `>=` floor documenting the oldest `coord` whose `--rust`/`--out`/
|
|
110
|
+
`$COORD_TUI_SRC` flags the CI job relies on is encouraged, same as there.
|
|
111
|
+
|
|
112
|
+
### What a red coord-tui CI job means
|
|
113
|
+
|
|
114
|
+
Copying [ADR_COORD_WEB_CI's section verbatim in spirit](ADR_COORD_WEB_CI.md#what-a-red-coord-web-ci-job-means),
|
|
115
|
+
because the failure shape is the same contract, just Rust instead of
|
|
116
|
+
TypeScript: when coord-tui's drift-gate job fails on a PR that touched no
|
|
117
|
+
Rust wire code, there are exactly two legitimate readings, and one forbidden
|
|
118
|
+
response.
|
|
119
|
+
|
|
120
|
+
1. **`coord.board_schema`'s wire contract changed** (a field added, removed,
|
|
121
|
+
or retyped on one of the seven `/board` projections) **without
|
|
122
|
+
regenerating.** This is a genuine contract break and the red is
|
|
123
|
+
*correct* — regenerate `generated.rs` from the new `code-coordinator`
|
|
124
|
+
release and commit the result.
|
|
125
|
+
2. **A bad `code-coordinator` release** changed what `scripts/codegen.py
|
|
126
|
+
--rust` emits for an unrelated reason (a bug in the generator itself).
|
|
127
|
+
Yank/fix the release. Do **not** exact-pin coord-tui's CI to route around
|
|
128
|
+
it — that trades a loud, dated outage for the silent, undated kind.
|
|
129
|
+
|
|
130
|
+
The forbidden response, same as the web ADR: silencing the job
|
|
131
|
+
(`continue-on-error`, deleting the install step, pinning to last-known-green
|
|
132
|
+
and walking away). That is exactly how a drift gate rots unnoticed.
|
|
133
|
+
|
|
134
|
+
## Decision 2 — the bool guard: retire it (option 1 of 3)
|
|
135
|
+
|
|
136
|
+
Three options were on the table:
|
|
137
|
+
|
|
138
|
+
1. **Retire it.** If Phase 1 leaves no Rust consumer of column types outside
|
|
139
|
+
the generated wire structs, the text-scraping check has no subject, and
|
|
140
|
+
`tests/test_board_schema.py`'s DTO assertions are the guard that remains.
|
|
141
|
+
2. **Move it to coord-tui's CI**, running against its own sources plus a
|
|
142
|
+
schema obtained from the daemon's OpenAPI spec rather than a live DB.
|
|
143
|
+
3. **Keep it here** against a vendored copy of the Rust types. Rejected on
|
|
144
|
+
sight: a vendored copy is a mirror, and mirrors are exactly what this
|
|
145
|
+
program has spent its "Phase A" removing everywhere else (`GOAL.md`,
|
|
146
|
+
`docs/ARCHITECTURE.md`).
|
|
147
|
+
|
|
148
|
+
**Decision: (1), retire it.** Phase 1 (#2895) landed first, confirming the
|
|
149
|
+
premise: `rusqlite` is gone from `tui/Cargo.toml`, and `tui/src/app/data.rs`
|
|
150
|
+
no longer opens a database at all. The *only* Rust consumer of `/board`
|
|
151
|
+
column types left is `tui/src/app/types/generated.rs` (+ any hand mirror in
|
|
152
|
+
`types.rs`), and that consumer is now doubly closed off from ever receiving
|
|
153
|
+
an unguarded bool, independent of the retired scrape:
|
|
154
|
+
|
|
155
|
+
- `tests/test_board_schema.py::test_integer_backed_booleans_are_declared_
|
|
156
|
+
integers` asserts every column in `board_schema.INTEGER_BACKED_BOOLEANS`
|
|
157
|
+
serializes as a JSON `integer` in the served spec, never `boolean`.
|
|
158
|
+
- `tests/test_board_schema.py::test_no_board_dto_field_is_typed_bool` is the
|
|
159
|
+
**blanket** form: *no* board DTO field is ever typed JSON `boolean`,
|
|
160
|
+
because nothing in SQLite can produce one. Given that, `scripts/codegen.py`'s
|
|
161
|
+
own mechanical mapping (`rust_type_from_schema`) can *never* auto-emit a
|
|
162
|
+
Rust `bool` for a board wire field — a JSON `type: boolean` schema is the
|
|
163
|
+
only input that maps to `bool`, and the DTO layer guarantees no such input
|
|
164
|
+
exists.
|
|
165
|
+
|
|
166
|
+
That closes the mechanical path completely: a future
|
|
167
|
+
`ALTER TABLE ... ADD COLUMN x INTEGER` meant as a flag, added correctly to
|
|
168
|
+
`board_schema.py` per its own convention (an `int`-typed dataclass field,
|
|
169
|
+
registered in `INTEGER_BACKED_BOOLEANS` if it is genuinely boolean-shaped),
|
|
170
|
+
can *never* reach the wire as a JSON boolean and can *never* be
|
|
171
|
+
mechanically generated as an unguarded Rust `bool`. The only residual risk —
|
|
172
|
+
a hand-authored `RUST_FIELD_OVERRIDES` entry in `scripts/codegen.py` that
|
|
173
|
+
mistypes an `INTEGER`-backed field as plain `bool` — is a one-file, human-
|
|
174
|
+
reviewed diff in *this* repo, not a drift class a text scrape across two
|
|
175
|
+
repos could catch any more cheaply than ordinary review already does.
|
|
176
|
+
|
|
177
|
+
Option (2) was rejected because it buys nothing options (1) doesn't already
|
|
178
|
+
cover: the OpenAPI-derived schema it would compare against is exactly the
|
|
179
|
+
same DTO-level information `test_board_schema.py` already asserts, just
|
|
180
|
+
re-fetched a second time from a different vantage point, at the cost of a
|
|
181
|
+
new schema-from-OpenAPI-spec plumbing path and a second repo's CI job to
|
|
182
|
+
keep green. Cheapest, and the honest reading of the seam.
|
|
183
|
+
|
|
184
|
+
`coord/board_bool_guard.py` is deleted. `tests/test_board_fixture.py` keeps
|
|
185
|
+
only its fixture-freshness half (`test_board_sample_fixture_is_up_to_date`,
|
|
186
|
+
`test_board_sample_fixture_parses_as_representative_payload`) — unrelated to
|
|
187
|
+
the bool guard, never read Rust source text, and stays exactly as before.
|
|
188
|
+
|
|
189
|
+
## Consequences
|
|
190
|
+
|
|
191
|
+
- `scripts/codegen.py --rust` requires `--out PATH` or `$COORD_TUI_SRC`; no
|
|
192
|
+
argument and no env var is a refusal (exit 2), not a guess.
|
|
193
|
+
- `tests/test_generated_rust_fixture.py` no longer byte-compares a
|
|
194
|
+
checked-in `tui/` path — it proves the generator runs and covers every
|
|
195
|
+
schema, mirroring `tests/test_generated_types_fixture.py`.
|
|
196
|
+
- `.github/workflows/test.yml`'s `test` job runs
|
|
197
|
+
`COORD_TUI_SRC=. python scripts/codegen.py --rust --check` as an explicit
|
|
198
|
+
step, standing in for the byte-comparison gate until coord-tui's own CI
|
|
199
|
+
exists to take it over.
|
|
200
|
+
- `coord/board_bool_guard.py` is deleted. The #632 blank-board class stays
|
|
201
|
+
closed by `tests/test_board_schema.py`'s DTO-level assertions
|
|
202
|
+
(`INTEGER_BACKED_BOOLEANS` + the blanket no-JSON-boolean check) — one
|
|
203
|
+
guard instead of two, at the layer where the invariant is actually
|
|
204
|
+
enforceable mechanically.
|
|
205
|
+
- Standing up coord-tui's own CI workflow (the byte-comparison job, and
|
|
206
|
+
whatever `cargo test`/acceptance jobs it needs) remains open — that is the
|
|
207
|
+
still-separate "move" story's job, same posture #2006/#2009 took for
|
|
208
|
+
`coord-web`.
|
|
209
|
+
|
|
210
|
+
## Rejected alternatives
|
|
211
|
+
|
|
212
|
+
See "Decision 2" above for the bool-guard options. For the generator split,
|
|
213
|
+
the rejected alternatives are the same ones #2009 already rejected for the
|
|
214
|
+
TS half (an exact-pin coord-tui CI install, a git-ref install instead of
|
|
215
|
+
PyPI, asserting the pin from inside coord-tui's own CI) — see
|
|
216
|
+
[ADR_COORD_WEB_CI](ADR_COORD_WEB_CI.md#rejected-alternatives) for the
|
|
217
|
+
reasoning, which applies unchanged.
|
|
@@ -55,26 +55,57 @@ Usage:
|
|
|
55
55
|
# exit 1 (no write) if that file is stale
|
|
56
56
|
COORD_WEB_SRC=~/src/coord-web .venv/bin/python scripts/codegen.py --check
|
|
57
57
|
|
|
58
|
-
#1941 — THIS SCRIPT ALSO GENERATES coord-tui's RUST WIRE
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
58
|
+
#1941 (extended by #2897) — THIS SCRIPT ALSO GENERATES coord-tui's RUST WIRE
|
|
59
|
+
TYPES, and as of #2897 the Rust half is cross-repo capable the SAME SHAPE as
|
|
60
|
+
the TS half above. `tui/` still lives in *this* repo today, but the eventual
|
|
61
|
+
split (tracked separately — this story produces the shape, not the move)
|
|
62
|
+
means the destination can't stay a fixed, checked-in path either: it is named
|
|
63
|
+
explicitly by `--out PATH` or by `$COORD_TUI_SRC` pointing at a checkout root
|
|
64
|
+
whose `tui/` holds coord-tui's crate, with the same no-fallback-default
|
|
65
|
+
reasoning as `resolve_output_path` above — a guess is always wrong
|
|
66
|
+
post-split, and under `--check` it is wrong in the direction that reports
|
|
67
|
+
success. Today `$COORD_TUI_SRC=.` (this checkout's own root) reproduces the
|
|
68
|
+
old fixed-path behaviour exactly (`<root>/tui/src/app/types/generated.rs`,
|
|
69
|
+
i.e. `tui/src/app/types/generated.rs`).
|
|
70
|
+
|
|
71
|
+
The source of truth is a *different* OpenAPI document than the TS path reads
|
|
72
|
+
— `coord.serve_app.openapi_spec()` (the daemon app, port 7435), not
|
|
73
|
+
`coord.dashboard.server.openapi_spec()` (the dashboard app, port 7434) —
|
|
74
|
+
because `GET /board`, the endpoint the TUI actually polls, is specified
|
|
75
|
+
there, from the seven explicit wire DTOs in `coord/board_schema.py` (#1849).
|
|
76
|
+
See `generate_rust()` below for the mechanical schema-walk + hand-curated-
|
|
77
|
+
override split, which mirrors `ENUM_OVERRIDES`/`_ENUM_BLOCK` above but at the
|
|
78
|
+
level of individual struct fields rather than whole enum types (Rust's richer
|
|
79
|
+
type system — visibility, `#[serde(rename/default/deserialize_with)]`,
|
|
80
|
+
custom deserializers for the INTEGER-backed-boolean guard — needs a
|
|
81
|
+
finer-grained override point than TS did).
|
|
82
|
+
|
|
83
|
+
The drift GATE splits the same way #2009 split the TS one (docs/
|
|
84
|
+
ADR_COORD_TUI_CI.md, #2897): what stays here is
|
|
85
|
+
`tests/test_generated_rust_fixture.py`, narrowed to what one checkout can
|
|
86
|
+
prove — the generator runs, produces well-formed output, and covers every
|
|
87
|
+
schema in the served `/board` spec. The byte-for-byte comparison against a
|
|
88
|
+
committed `generated.rs` belongs to coord-tui's own CI once it exists,
|
|
89
|
+
installing `code-coordinator[server]` from PyPI to get this script — the same
|
|
90
|
+
shape `docs/ADR_COORD_WEB_CI.md` (#2006) already gave the TS half, just not
|
|
91
|
+
stood up yet (standing it up is the still-open "move" story's job, not
|
|
92
|
+
this one's).
|
|
93
|
+
|
|
94
|
+
The producer-side INTEGER-backed-boolean guard that used to cross-reference
|
|
95
|
+
the Rust source text against a live SQLite schema (`coord/board_bool_guard.py`)
|
|
96
|
+
is RETIRED as of #2897 — see `docs/ADR_COORD_TUI_CI.md` for the reasoning.
|
|
97
|
+
Short version: #2895 (Phase 1 of #2894) deleted coord-tui's last direct SQL
|
|
98
|
+
reader, so the structs this file generates are now the *only* Rust consumer
|
|
99
|
+
of column types, and they are already pinned int-vs-bool by the DTO-level
|
|
100
|
+
assertion in `tests/test_board_schema.py` (`board_schema.INTEGER_BACKED_BOOLEANS`).
|
|
101
|
+
The text-scraping half had no remaining subject once that was true.
|
|
102
|
+
|
|
103
|
+
# today, while tui/ still lives in this repo:
|
|
104
|
+
COORD_TUI_SRC=. .venv/bin/python scripts/codegen.py --rust
|
|
76
105
|
# exit 1 (no write) if that file is stale
|
|
77
|
-
.venv/bin/python scripts/codegen.py --rust --check
|
|
106
|
+
COORD_TUI_SRC=. .venv/bin/python scripts/codegen.py --rust --check
|
|
107
|
+
# or name the file directly
|
|
108
|
+
.venv/bin/python scripts/codegen.py --rust --out tui/src/app/types/generated.rs
|
|
78
109
|
"""
|
|
79
110
|
|
|
80
111
|
from __future__ import annotations
|
|
@@ -90,17 +121,26 @@ from coord.serve_app import openapi_spec as board_openapi_spec
|
|
|
90
121
|
|
|
91
122
|
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
92
123
|
|
|
93
|
-
#: Fixed, in-repo destination for the generated Rust wire types (#1941).
|
|
94
|
-
#: Unlike `OUTPUT_RELPATH` above, `tui/` never left this repo, so there is no
|
|
95
|
-
#: cross-repo destination ambiguity to resolve — no `--out`, no env var.
|
|
96
|
-
RUST_OUTPUT_PATH = REPO_ROOT / "tui" / "src" / "app" / "types" / "generated.rs"
|
|
97
|
-
|
|
98
124
|
#: Path of the emitted file RELATIVE to a `coord-web` checkout's root.
|
|
99
125
|
OUTPUT_RELPATH = Path("src") / "api" / "generated.ts"
|
|
100
126
|
|
|
101
127
|
#: Env var naming a `coord-web` checkout root, used when `--out` is absent.
|
|
102
128
|
OUTPUT_ENV_VAR = "COORD_WEB_SRC"
|
|
103
129
|
|
|
130
|
+
#: Path of the emitted file RELATIVE to a `$COORD_TUI_SRC` checkout root
|
|
131
|
+
#: (#2897) — i.e. `<root>/tui/src/app/types/generated.rs`. The `tui/` prefix
|
|
132
|
+
#: stays even though the TS analogue (`OUTPUT_RELPATH`) has no `webapp/`
|
|
133
|
+
#: prefix: today `$COORD_TUI_SRC` names *this* checkout (its coord-tui crate
|
|
134
|
+
#: lives under `tui/`), and the eventual split hasn't decided coord-tui's own
|
|
135
|
+
#: root layout yet — that decision belongs to the still-open "move" story,
|
|
136
|
+
#: not this one.
|
|
137
|
+
RUST_OUTPUT_RELPATH = Path("tui") / "src" / "app" / "types" / "generated.rs"
|
|
138
|
+
|
|
139
|
+
#: Env var naming a checkout root whose `tui/` holds coord-tui's crate,
|
|
140
|
+
#: used when `--out` is absent (#2897). `$COORD_TUI_SRC=.` (this checkout's
|
|
141
|
+
#: own root) reproduces today's old fixed-path behaviour exactly.
|
|
142
|
+
RUST_OUTPUT_ENV_VAR = "COORD_TUI_SRC"
|
|
143
|
+
|
|
104
144
|
|
|
105
145
|
class OutputPathError(Exception):
|
|
106
146
|
"""No destination was named — see :func:`resolve_output_path`."""
|
|
@@ -126,6 +166,31 @@ def resolve_output_path(explicit: str | Path | None = None) -> Path:
|
|
|
126
166
|
f"{OUTPUT_RELPATH}). See this script's module docstring."
|
|
127
167
|
)
|
|
128
168
|
|
|
169
|
+
|
|
170
|
+
def resolve_rust_output_path(explicit: str | Path | None = None) -> Path:
|
|
171
|
+
"""Where to write/check ``generated.rs``: ``--out`` > ``$COORD_TUI_SRC``.
|
|
172
|
+
|
|
173
|
+
Mirrors ``resolve_output_path`` above, for the Rust half (#2897). Raises
|
|
174
|
+
:class:`OutputPathError` when neither is set, rather than guessing:
|
|
175
|
+
`tui/` still lives in this repo today, but silently falling back to that
|
|
176
|
+
fixed path would either recreate a dead directory nobody consumes once
|
|
177
|
+
coord-tui moves out, or, worse, report "up to date" against a file that
|
|
178
|
+
is not the one actually named — the same failure shape #2009 called out
|
|
179
|
+
for the TS half. Pass ``COORD_TUI_SRC=.`` to reproduce today's old
|
|
180
|
+
fixed-path behaviour explicitly.
|
|
181
|
+
"""
|
|
182
|
+
if explicit is not None:
|
|
183
|
+
return Path(explicit).expanduser()
|
|
184
|
+
root = os.environ.get(RUST_OUTPUT_ENV_VAR)
|
|
185
|
+
if root:
|
|
186
|
+
return Path(root).expanduser() / RUST_OUTPUT_RELPATH
|
|
187
|
+
raise OutputPathError(
|
|
188
|
+
"no destination for generated.rs. Pass --out PATH or set "
|
|
189
|
+
f"${RUST_OUTPUT_ENV_VAR} to a coord-tui checkout root (the file is "
|
|
190
|
+
f"written to its {RUST_OUTPUT_RELPATH}) — e.g. $COORD_TUI_SRC=. for "
|
|
191
|
+
"this checkout's own tui/. See this script's module docstring."
|
|
192
|
+
)
|
|
193
|
+
|
|
129
194
|
# Schemas to emit as TS interfaces, in display order — purely cosmetic (TS
|
|
130
195
|
# `interface` declarations are hoisted, so forward references within
|
|
131
196
|
# generated.ts are legal regardless of order). Anything present in the spec
|
|
@@ -1174,7 +1239,7 @@ RUST_HEADER = """\
|
|
|
1174
1239
|
//! `coord/board_schema.py` (#1849) — #1941. Regenerate after any field change:
|
|
1175
1240
|
//!
|
|
1176
1241
|
//! ```text
|
|
1177
|
-
//! .venv/bin/python scripts/codegen.py --rust
|
|
1242
|
+
//! COORD_TUI_SRC=<coord-tui checkout root> .venv/bin/python scripts/codegen.py --rust
|
|
1178
1243
|
//! ```
|
|
1179
1244
|
//!
|
|
1180
1245
|
//! (The fence is load-bearing, and `text` is the load-bearing part of *it*:
|
|
@@ -1183,17 +1248,21 @@ RUST_HEADER = """\
|
|
|
1183
1248
|
//! that command as an indented block, or in a bare ``` fence, breaks
|
|
1184
1249
|
//! `cargo test --doc` with `error: expected item, found `.``.)
|
|
1185
1250
|
//!
|
|
1186
|
-
//!
|
|
1187
|
-
//!
|
|
1188
|
-
//!
|
|
1251
|
+
//! #2897: the destination is named explicitly (`--out PATH` / `$COORD_TUI_SRC`
|
|
1252
|
+
//! — see this script's module docstring), the same shape #2009 gave the TS
|
|
1253
|
+
//! half. `tests/test_generated_rust_fixture.py` proves the generator runs and
|
|
1254
|
+
//! covers every schema; the byte-for-byte freshness check against *this file
|
|
1255
|
+
//! as committed* is coord-tui's own CI job once it exists
|
|
1256
|
+
//! (`docs/ADR_COORD_TUI_CI.md`) rather than a test in this repo.
|
|
1189
1257
|
//!
|
|
1190
1258
|
//! **Every field defaults.** `/board` is one JSON payload: a single type
|
|
1191
1259
|
//! mismatch on a single field fails the *entire* `BoardPayload` parse and
|
|
1192
1260
|
//! blanks every TUI panel — the #632/#546/#628 failure class this repo has
|
|
1193
|
-
//! been bitten by three times
|
|
1194
|
-
//!
|
|
1195
|
-
//!
|
|
1196
|
-
//!
|
|
1261
|
+
//! been bitten by three times. INTEGER-backed boolean columns
|
|
1262
|
+
//! (`is_interactive`, `hold_after`, `no_acceptance`, `review_scoped`) stay
|
|
1263
|
+
//! typed as an integer, or go through a coercing deserializer — never a
|
|
1264
|
+
//! plain `bool` — for the same reason (`coord/board_schema.py`'s
|
|
1265
|
+
//! `INTEGER_BACKED_BOOLEANS`, asserted int-typed by `tests/test_board_schema.py`).
|
|
1197
1266
|
//!
|
|
1198
1267
|
//! Field types for anything already consumed by the TUI are hand-pinned in
|
|
1199
1268
|
//! `RUST_FIELD_OVERRIDES` (`scripts/codegen.py`) to match this file's
|
|
@@ -1223,27 +1292,37 @@ def generate_rust() -> str:
|
|
|
1223
1292
|
|
|
1224
1293
|
|
|
1225
1294
|
def _main_rust(args: list[str]) -> int:
|
|
1295
|
+
try:
|
|
1296
|
+
output_path = resolve_rust_output_path(_parse_out(args))
|
|
1297
|
+
except OutputPathError as exc:
|
|
1298
|
+
print(str(exc), file=sys.stderr)
|
|
1299
|
+
return 2
|
|
1226
1300
|
content = generate_rust()
|
|
1227
1301
|
if "--check" in args:
|
|
1228
|
-
|
|
1302
|
+
# #2897: a MISSING file is a hard failure, not "stale vs empty" —
|
|
1303
|
+
# mirrors the TS `--check` path's reasoning below. Absence usually
|
|
1304
|
+
# means --out/$COORD_TUI_SRC is pointing somewhere that is not a
|
|
1305
|
+
# coord-tui checkout, and treating that as ordinary staleness would
|
|
1306
|
+
# send an operator off to regenerate into the wrong directory.
|
|
1307
|
+
if not output_path.exists():
|
|
1229
1308
|
print(
|
|
1230
|
-
f"{
|
|
1231
|
-
"
|
|
1309
|
+
f"{output_path} does not exist — is --out/${RUST_OUTPUT_ENV_VAR} "
|
|
1310
|
+
"pointing at a coord-tui checkout?",
|
|
1232
1311
|
file=sys.stderr,
|
|
1233
1312
|
)
|
|
1234
1313
|
return 1
|
|
1235
|
-
if
|
|
1314
|
+
if output_path.read_text() != content:
|
|
1236
1315
|
print(
|
|
1237
|
-
f"{
|
|
1238
|
-
"to regenerate.",
|
|
1316
|
+
f"{output_path} is stale — run `python scripts/codegen.py "
|
|
1317
|
+
f"--rust --out {output_path}` to regenerate.",
|
|
1239
1318
|
file=sys.stderr,
|
|
1240
1319
|
)
|
|
1241
1320
|
return 1
|
|
1242
|
-
print(f"{
|
|
1321
|
+
print(f"{output_path} is up to date.")
|
|
1243
1322
|
return 0
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
print(f"wrote {
|
|
1323
|
+
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
1324
|
+
output_path.write_text(content)
|
|
1325
|
+
print(f"wrote {output_path}")
|
|
1247
1326
|
return 0
|
|
1248
1327
|
|
|
1249
1328
|
|
|
@@ -1262,9 +1341,9 @@ def _parse_out(args: list[str]) -> str | None:
|
|
|
1262
1341
|
def main(argv: list[str] | None = None) -> int:
|
|
1263
1342
|
args = sys.argv[1:] if argv is None else argv
|
|
1264
1343
|
if "--rust" in args:
|
|
1265
|
-
# #
|
|
1266
|
-
#
|
|
1267
|
-
#
|
|
1344
|
+
# #2897: the Rust path is now cross-repo capable the same shape as
|
|
1345
|
+
# the TS path below (--out / $COORD_TUI_SRC, no fallback default) —
|
|
1346
|
+
# see resolve_rust_output_path's docstring.
|
|
1268
1347
|
return _main_rust(args)
|
|
1269
1348
|
try:
|
|
1270
1349
|
output_path = resolve_output_path(_parse_out(args))
|