code-coordinator 0.5.264__tar.gz → 0.5.267__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.264 → code_coordinator-0.5.267}/PKG-INFO +1 -1
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/board_wire.py +131 -18
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/release.py +28 -2
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/serve_app.py +39 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/codegen.py +22 -7
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_read_path.py +8 -7
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_wire.py +96 -6
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_release_propagate.py +36 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/approved.rs +444 -16
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/data.rs +31 -16
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/dialogs.rs +233 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/drive_queue.rs +34 -8
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/events.rs +12 -2
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/fixtures.rs +2 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/mod.rs +14 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/pipeline.rs +33 -12
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/sessions.rs +31 -2
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/settings_ui.rs +42 -5
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/sidebar.rs +11 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/tests.rs +304 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/types/generated.rs +9 -6
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.gitignore +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/CLAUDE.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/GOAL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/LICENSE +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/MANIFEST.in +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/README.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/__init__.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agent.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/audit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/block_log.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/board_service.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/brain.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/claim.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/cli.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/client.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/comments.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/config.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dao.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/db.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deps.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/drive.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/events.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/filelock.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/freshness.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/gates.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/goal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/context.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/models.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/render.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/units.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/hooks.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/interactive.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/models.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/network.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notify.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/openapi.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/parentage.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/plans.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/progress.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/release_window.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/reports.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/review.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/self_health.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/smoke.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/split_work.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/sql.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/state.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/test_author.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/test_report.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/usage.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/install-agent.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/pyproject.toml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/setup.cfg +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/__init__.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/conftest.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_db.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_events.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_init.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_models.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_network.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_session.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_split.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_state.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -15,14 +15,12 @@ This module is the single place the per-field wire policy lives:
|
|
|
15
15
|
with ``<field>_truncated: true`` (+ ``<field>_len``). Consumers that need
|
|
16
16
|
the full text (fix-worker briefings, the TUI findings pane) fetch the
|
|
17
17
|
single-resource detail endpoint ``GET /assignment/{id}``.
|
|
18
|
-
* **Bounded documents** — ``
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
body (see :func:`bound_issue_row`); GitHub's own 64 KB issue-body limit ×
|
|
25
|
-
the handful of epics per board keeps the exemption bounded. Full body:
|
|
18
|
+
* **Bounded documents** — ``test_plan`` — get a *high* hard cap that today
|
|
19
|
+
truncates nothing real but bounds the pathological row, because clients
|
|
20
|
+
parse these semantically and an aggressive prefix cut would break those
|
|
21
|
+
parses.
|
|
22
|
+
* **``issues.body`` is not on the collection wire at all** (#1939), except
|
|
23
|
+
for tracking (epic) issues. See :func:`bound_issue_row`. Full body:
|
|
26
24
|
``GET /issue/{repo}/{number}``.
|
|
27
25
|
|
|
28
26
|
Everything here is wire-only: the DB row, the detail endpoints, and local
|
|
@@ -49,6 +47,24 @@ issues outright, on top of the existing per-field width caps. Both cuts are
|
|
|
49
47
|
flagged on the payload (``board_truncated`` + counts) so a client can tell
|
|
50
48
|
it received a trimmed board rather than the whole history — see
|
|
51
49
|
:func:`bound_board_payload`.
|
|
50
|
+
|
|
51
|
+
**#1939 (instance #5): the 16 KB body cap bounded the pathological row and
|
|
52
|
+
nothing else.** #1337 gave ``issues.body`` a *document* cap high enough that
|
|
53
|
+
it truncates no real issue (p99 ≈ 9 KB against a 16 KB cap), and #1791 then
|
|
54
|
+
dropped the body of *closed* issues outright. What was left — every **open,
|
|
55
|
+
non-epic** body, shipped whole on every uncached poll — was still 1.44 MB of
|
|
56
|
+
a 1.69 MB issue-body payload measured on the live board, for a field that is
|
|
57
|
+
display material, not something a collection *view* renders directly: the
|
|
58
|
+
TUI reads it lazily, on demand, through several panes that share the same
|
|
59
|
+
``issue_detail_cache`` / ``GET /issue/{repo}/{number}`` hydration path (the
|
|
60
|
+
Board and Pipeline Issue tabs since #2497; the Drive/Merge Queue tab's
|
|
61
|
+
issue-detail pane and the "Chat about issue" briefing as of this fix) rather
|
|
62
|
+
than each parsing the wire body eagerly. Do not assume the Board/Pipeline
|
|
63
|
+
tabs are the only consumers when touching this policy again — check every
|
|
64
|
+
Rust call site of ``OpenIssue.body`` / ``PipelineIssue.body`` first. So the
|
|
65
|
+
body now leaves the collection wire for open issues too, and
|
|
66
|
+
:func:`bound_issue_row` keeps only the machine-parsed *residue* a client
|
|
67
|
+
cannot re-fetch in time — see :data:`ALLOWED_GLOB_MARKER`.
|
|
52
68
|
"""
|
|
53
69
|
|
|
54
70
|
from __future__ import annotations
|
|
@@ -88,6 +104,27 @@ BOARD_PAYLOAD_BYTE_BUDGET = 2_500_000
|
|
|
88
104
|
# (TUI pane, dialog) knows it is one — machine consumers use the flags.
|
|
89
105
|
TRUNCATION_NOTICE = "\n… [truncated on the /board wire — full text: detail endpoint]"
|
|
90
106
|
|
|
107
|
+
# #1939: the ONE line-level marker a thin client parses out of a non-epic
|
|
108
|
+
# issue body *synchronously*, without a user action that could wait for a
|
|
109
|
+
# detail fetch — `tui/src/app/pipeline.rs`'s
|
|
110
|
+
# `parse_allowed_globs_from_issue_body` MARKER, read by
|
|
111
|
+
# `acceptance_for_path_arg` while handling a Pipeline right-click dispatch on
|
|
112
|
+
# a repo with more than one acceptance route (`claude-coordinator` itself has
|
|
113
|
+
# two: `coord/**` and `tui/**`). Lines carrying it survive the body cut; see
|
|
114
|
+
# `_machine_readable_residue`. Kept in sync with the Rust side by
|
|
115
|
+
# tests/test_board_wire.py::test_allowed_glob_marker_matches_the_rust_parser,
|
|
116
|
+
# the same cross-language guard posture as coord/board_bool_guard.py.
|
|
117
|
+
#
|
|
118
|
+
# Measured cost of the retention: ZERO on today's live board — 0 of 781
|
|
119
|
+
# issue bodies carry the marker (the house `## Files` convention is a bare
|
|
120
|
+
# backticked-path list, which that parser does not read), so the residue is
|
|
121
|
+
# empty for every real row and the byte win below is unaffected. It is kept
|
|
122
|
+
# anyway because the marker IS the documented spelling
|
|
123
|
+
# (`parse_allowed_globs_from_issue_body`'s own tests use it) and a body that
|
|
124
|
+
# adopts it must keep resolving `--for-path` from the Pipeline right-click
|
|
125
|
+
# rather than silently degrading to "dispatch from the CLI instead".
|
|
126
|
+
ALLOWED_GLOB_MARKER = "**Allowed:**"
|
|
127
|
+
|
|
91
128
|
|
|
92
129
|
def _preview(text: str, cap: int) -> str:
|
|
93
130
|
return text[:cap] + TRUNCATION_NOTICE
|
|
@@ -150,8 +187,31 @@ def _bound_test_plan(row: dict, cap: int) -> None:
|
|
|
150
187
|
row["test_plan"] = None
|
|
151
188
|
|
|
152
189
|
|
|
190
|
+
#: table → every field this module may stamp ``<field>_truncated`` /
|
|
191
|
+
#: ``<field>_len`` onto. Those flags are **wire-only**: they are not DB
|
|
192
|
+
#: columns, so they are deliberately absent from the DTOs in
|
|
193
|
+
#: ``coord/board_schema.py`` (whose rule — "a column not declared here is not
|
|
194
|
+
#: on the wire" — is about *columns*). They are still on the wire, so
|
|
195
|
+
#: ``coord/serve_app.py``'s ``_board_payload_schema`` publishes them off this
|
|
196
|
+
#: table; before #1939 made issue-body bounding unconditional they fired
|
|
197
|
+
#: rarely enough that ``/openapi.json`` never had to admit they existed.
|
|
198
|
+
BOUNDED_TEXT_FIELDS: dict[str, tuple[str, ...]] = {
|
|
199
|
+
"assignments": (
|
|
200
|
+
"review_findings",
|
|
201
|
+
"test_reason",
|
|
202
|
+
"smoke_test_reason",
|
|
203
|
+
"failure_reason",
|
|
204
|
+
"test_plan",
|
|
205
|
+
),
|
|
206
|
+
"issues": ("body",),
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
|
|
153
210
|
def bound_assignment_row(row: dict) -> None:
|
|
154
|
-
"""Apply the wire policy to one ``/board`` assignment row (mutates).
|
|
211
|
+
"""Apply the wire policy to one ``/board`` assignment row (mutates).
|
|
212
|
+
|
|
213
|
+
Every field it may bound is listed in :data:`BOUNDED_TEXT_FIELDS`.
|
|
214
|
+
"""
|
|
155
215
|
_bound_review_findings(row, PREVIEW_CHARS)
|
|
156
216
|
_bound_text_field(row, "test_reason", PREVIEW_CHARS)
|
|
157
217
|
_bound_text_field(row, "smoke_test_reason", PREVIEW_CHARS)
|
|
@@ -172,6 +232,26 @@ def _is_closed_issue(row: dict) -> bool:
|
|
|
172
232
|
return isinstance(state, str) and state.strip().lower() == "closed"
|
|
173
233
|
|
|
174
234
|
|
|
235
|
+
def _machine_readable_residue(body: str) -> str:
|
|
236
|
+
"""The lines of *body* a **client** parses without a user action, joined
|
|
237
|
+
back together (#1939).
|
|
238
|
+
|
|
239
|
+
Everything else in a non-epic body is display material, and the Issue
|
|
240
|
+
tab re-fetches that from ``GET /issue/{repo}/{number}`` on demand. What
|
|
241
|
+
cannot be re-fetched in time is the ``## Files`` glob declaration that
|
|
242
|
+
``acceptance_for_path_arg`` reads *synchronously* while handling a
|
|
243
|
+
right-click dispatch — so those lines, and only those, stay inline.
|
|
244
|
+
|
|
245
|
+
Line-scoped by construction: the Rust parser matches
|
|
246
|
+
:data:`ALLOWED_GLOB_MARKER` per line and reads only the backtick spans
|
|
247
|
+
that follow it on that same line, so retaining whole matching lines is
|
|
248
|
+
exactly equivalent to retaining the whole body as far as it can tell.
|
|
249
|
+
"""
|
|
250
|
+
return "".join(
|
|
251
|
+
f"{line}\n" for line in body.splitlines() if ALLOWED_GLOB_MARKER in line
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
|
|
175
255
|
def bound_issue_row(row: dict) -> None:
|
|
176
256
|
"""Apply the wire policy to one ``/board`` issue row (mutates).
|
|
177
257
|
|
|
@@ -183,24 +263,57 @@ def bound_issue_row(row: dict) -> None:
|
|
|
183
263
|
work-order items past DOCUMENT_CHARS would silently drop DAG nodes on
|
|
184
264
|
thin clients — a regression in exactly the failure class #1337 exists to
|
|
185
265
|
close. The exemption stays bounded in practice: an epic body is capped
|
|
186
|
-
at 65,536 chars by GitHub itself and boards carry few epics (
|
|
187
|
-
0.
|
|
266
|
+
at 65,536 chars by GitHub itself and boards carry few epics (48 open
|
|
267
|
+
today, 0.24 MB total).
|
|
188
268
|
|
|
189
269
|
**Closed (non-epic) issues drop the body entirely** (#1791): a closed
|
|
190
270
|
issue is terminal — no pipeline decision, client-side or server-side,
|
|
191
|
-
reads its body once it's closed
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
271
|
+
reads its body once it's closed.
|
|
272
|
+
|
|
273
|
+
**Open (non-epic) issues keep only the machine-parsed residue** (#1939).
|
|
274
|
+
The rest of an open body is display material, and every Rust consumer of
|
|
275
|
+
the synced row (the Board/Pipeline Issue tabs since #2497; the
|
|
276
|
+
Drive/Merge Queue tab's issue-detail pane and the "Chat about issue"
|
|
277
|
+
briefing as of this fix) hydrates it lazily from
|
|
278
|
+
``GET /issue/{repo}/{number}`` instead — so shipping it inline was
|
|
279
|
+
1.44 MB per uncached poll, per client, for text nothing renders until a
|
|
280
|
+
user opens one issue. ``body_truncated`` + ``body_len`` are stamped
|
|
281
|
+
exactly as for a closed issue, which is what arms that hydration
|
|
282
|
+
(``pipeline.rs::issue_body_fetch_target``).
|
|
197
283
|
"""
|
|
198
284
|
if _is_tracking_issue(row):
|
|
199
285
|
return
|
|
200
286
|
if _is_closed_issue(row):
|
|
201
287
|
_bound_text_field(row, "body", 0)
|
|
202
288
|
return
|
|
203
|
-
|
|
289
|
+
_bound_open_issue_body(row)
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def _bound_open_issue_body(row: dict) -> None:
|
|
293
|
+
"""#1939: replace an open non-epic ``body`` with its machine-readable
|
|
294
|
+
residue + the truncation notice, stamping the same
|
|
295
|
+
``body_truncated``/``body_len`` flags :func:`_bound_text_field` does.
|
|
296
|
+
|
|
297
|
+
A body whose residue is not actually smaller than the original (a body
|
|
298
|
+
that *is* one ``**Allowed:**`` line, or an empty one) is left alone
|
|
299
|
+
rather than flagged — same "nothing was cut, so the shape is unchanged"
|
|
300
|
+
rule the width caps follow.
|
|
301
|
+
"""
|
|
302
|
+
val = row.get("body")
|
|
303
|
+
if not isinstance(val, str) or not val:
|
|
304
|
+
return
|
|
305
|
+
residue = _machine_readable_residue(val)
|
|
306
|
+
# Backstop for a pathological body that is nothing but glob declarations
|
|
307
|
+
# — can't happen with a real issue, but the point of this module is that
|
|
308
|
+
# no collection field is unbounded.
|
|
309
|
+
if len(residue) > DOCUMENT_CHARS:
|
|
310
|
+
residue = residue[:DOCUMENT_CHARS]
|
|
311
|
+
replacement = residue + TRUNCATION_NOTICE
|
|
312
|
+
if len(replacement) >= len(val):
|
|
313
|
+
return
|
|
314
|
+
row["body_len"] = len(val)
|
|
315
|
+
row["body_truncated"] = True
|
|
316
|
+
row["body"] = replacement
|
|
204
317
|
|
|
205
318
|
|
|
206
319
|
def _open_issue_keys(issues) -> set[tuple[str, int]]:
|
|
@@ -653,10 +653,22 @@ def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
|
|
|
653
653
|
return out
|
|
654
654
|
|
|
655
655
|
|
|
656
|
-
def _ensure_roll_pending_marker(
|
|
656
|
+
def _ensure_roll_pending_marker(
|
|
657
|
+
target_version: str, *, reason: str, dry_run: bool = False
|
|
658
|
+
) -> None:
|
|
657
659
|
"""#2587: make sure a roll-pending marker exists for *target_version*,
|
|
658
660
|
without resetting an already-live one's clock.
|
|
659
661
|
|
|
662
|
+
#2869: ``dry_run=True`` is the ONE seam every call site must go through —
|
|
663
|
+
it never touches disk, only echoing what it *would* have written, in the
|
|
664
|
+
same "would ..." register as ``_fire_pending_roll``'s and
|
|
665
|
+
``_apply_cordons``'s own dry-run wording. A caller-side ``if dry_run:``
|
|
666
|
+
guard around the call site was tried first and is exactly what let this
|
|
667
|
+
bug happen: the marker write is the one state mutation on the #2587
|
|
668
|
+
defer branch that never got that guard. Folding the check in here means
|
|
669
|
+
a future second call site inherits the guard for free instead of having
|
|
670
|
+
to remember to add its own.
|
|
671
|
+
|
|
660
672
|
Called from the one place `coord release propagate` itself hits the
|
|
661
673
|
#2112 daemon-busy deadlock it cannot roll through on its own (the
|
|
662
674
|
daemon-first ``busy_hosts`` check in :func:`release_propagate`) — so a
|
|
@@ -692,10 +704,24 @@ def _ensure_roll_pending_marker(target_version: str, *, reason: str) -> None:
|
|
|
692
704
|
if existing is not None and existing.target_version == target_version:
|
|
693
705
|
return
|
|
694
706
|
if existing is not None:
|
|
707
|
+
if dry_run:
|
|
708
|
+
click.echo(
|
|
709
|
+
f"--dry-run: would replace the pending roll-pending marker "
|
|
710
|
+
f"({existing.describe()}) with v{target_version} (reason="
|
|
711
|
+
f"{reason!r}), preserving its original set_at/deferrals (#2607)"
|
|
712
|
+
)
|
|
713
|
+
return
|
|
695
714
|
write_roll_pending(
|
|
696
715
|
_dataclasses.replace(existing, target_version=target_version, reason=reason)
|
|
697
716
|
)
|
|
698
717
|
return
|
|
718
|
+
if dry_run:
|
|
719
|
+
click.echo(
|
|
720
|
+
f"--dry-run: would set a roll-pending marker for v{target_version} "
|
|
721
|
+
f"(reason={reason!r}) — the drive-queue tick would then hold "
|
|
722
|
+
"capacity at 0 until the queue drains"
|
|
723
|
+
)
|
|
724
|
+
return
|
|
699
725
|
write_roll_pending(
|
|
700
726
|
RollPending(target_version=target_version, set_at=_time.time(), reason=reason)
|
|
701
727
|
)
|
|
@@ -1097,7 +1123,7 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
1097
1123
|
# too, so a plain periodic `coord-release-propagate.timer` run also
|
|
1098
1124
|
# arms the drive-queue tick's own inter-drive-gap trigger instead of
|
|
1099
1125
|
# requiring an operator to separately reach for `nightly-window`.
|
|
1100
|
-
_ensure_roll_pending_marker(record.target_version, reason="propagate")
|
|
1126
|
+
_ensure_roll_pending_marker(record.target_version, reason="propagate", dry_run=dry_run)
|
|
1101
1127
|
_finish(rp.STATUS_DEFERRED, 0)
|
|
1102
1128
|
|
|
1103
1129
|
still_busy = busy_hosts - set(current)
|
|
@@ -2303,6 +2303,45 @@ def _board_response_schema(components: dict) -> dict:
|
|
|
2303
2303
|
for cls in board_schema.BOARD_PROJECTIONS.values():
|
|
2304
2304
|
dataclass_schema(cls, components)
|
|
2305
2305
|
|
|
2306
|
+
# #1939: `coord.board_wire` stamps `<field>_truncated` / `<field>_len`
|
|
2307
|
+
# onto bounded rows *after* the DTO projection. They are wire-only (no DB
|
|
2308
|
+
# column backs them), so they are not — and should not be — DTO fields;
|
|
2309
|
+
# but they ARE on the wire, and since #1939 made issue-body bounding
|
|
2310
|
+
# unconditional EVERY open non-epic issue carries them, where before they
|
|
2311
|
+
# fired rarely enough that nothing noticed the spec omitted them.
|
|
2312
|
+
# Declared off board_wire's own field table so the published schema stays
|
|
2313
|
+
# a superset of what /board emits (asserted by
|
|
2314
|
+
# tests/test_board_schema.py::test_board_dtos_and_projection_cannot_drift).
|
|
2315
|
+
#
|
|
2316
|
+
# Only `issues` is published here, not board_wire's whole
|
|
2317
|
+
# BOUNDED_TEXT_FIELDS table. `assignments`' four remaining flag pairs
|
|
2318
|
+
# (test_reason/smoke_test_reason/failure_reason/test_plan — review_findings
|
|
2319
|
+
# is already hand-declared on the Rust side) are the same pre-existing
|
|
2320
|
+
# omission, but they are not what #1939 changed, and declaring them makes
|
|
2321
|
+
# `scripts/codegen.py --rust` emit eight new `Assignment` fields, which
|
|
2322
|
+
# forces ~380 lines of struct-literal churn across 48 fixture sites for a
|
|
2323
|
+
# diff about /board byte size. Left for its own change.
|
|
2324
|
+
from coord.board_wire import BOUNDED_TEXT_FIELDS # noqa: PLC0415
|
|
2325
|
+
|
|
2326
|
+
for _table, _fields in ((t, BOUNDED_TEXT_FIELDS[t]) for t in ("issues",)):
|
|
2327
|
+
_props = components[board_schema.BOARD_PROJECTIONS[_table].__name__]["properties"]
|
|
2328
|
+
for _field in _fields:
|
|
2329
|
+
_props[f"{_field}_truncated"] = {
|
|
2330
|
+
"type": "boolean",
|
|
2331
|
+
"description": (
|
|
2332
|
+
f"#1337/#1939: true when the /board wire bounded `{_field}`. "
|
|
2333
|
+
"Additive-only — absent (not false) when nothing was cut. "
|
|
2334
|
+
"Fetch the full value from the single-resource detail read."
|
|
2335
|
+
),
|
|
2336
|
+
}
|
|
2337
|
+
_props[f"{_field}_len"] = {
|
|
2338
|
+
"type": "integer",
|
|
2339
|
+
"description": (
|
|
2340
|
+
f"#1337/#1939: `{_field}`'s full length before bounding. "
|
|
2341
|
+
f"Present only alongside `{_field}_truncated`."
|
|
2342
|
+
),
|
|
2343
|
+
}
|
|
2344
|
+
|
|
2306
2345
|
planned_merge_ref = dataclass_schema(PlannedMerge, components)
|
|
2307
2346
|
staging_item_ref = dataclass_schema(StagingItem, components)
|
|
2308
2347
|
|
|
@@ -1050,12 +1050,15 @@ RUST_EXTRA_FIELDS: dict[str, tuple[RustField, ...]] = {
|
|
|
1050
1050
|
RustField(
|
|
1051
1051
|
name="body_truncated", ty="bool", serde=("default",),
|
|
1052
1052
|
doc=(
|
|
1053
|
-
"#2497: true when the `/board` wire bounded `body
|
|
1054
|
-
"
|
|
1055
|
-
"chars (#1791)
|
|
1056
|
-
"
|
|
1057
|
-
"
|
|
1058
|
-
"
|
|
1053
|
+
"#2497: true when the `/board` wire bounded `body`. Set for every",
|
|
1054
|
+
"NON-EPIC issue, closed or open: `board_wire.bound_issue_row` drops a",
|
|
1055
|
+
"closed body to 0 chars (#1791) and an open one to its machine-parsed",
|
|
1056
|
+
"`**Allowed:**` residue (#1939), because the Issue tabs hydrate the",
|
|
1057
|
+
"real text lazily from `GET /issue/{repo}/{number}`. Absent only for",
|
|
1058
|
+
"epic bodies, which stay inline for the client-side Milestone DAG",
|
|
1059
|
+
"parse. `#[serde(default)]` so an older daemon (pre-#2497, never",
|
|
1060
|
+
"stamps this) deserializes as `false` — the pre-existing behavior of",
|
|
1061
|
+
"trusting `body` verbatim.",
|
|
1059
1062
|
"",
|
|
1060
1063
|
"Not part of `coord.board_schema.BoardIssue` — stamped onto the row",
|
|
1061
1064
|
"afterward by `coord/board_wire.py`; kept here by hand alongside its",
|
|
@@ -1142,10 +1145,22 @@ def emit_rust_struct(schema_name: str, rust_name: str, schemas: dict[str, Any])
|
|
|
1142
1145
|
lines.extend(meta["attrs"])
|
|
1143
1146
|
lines.append(f"#[derive({', '.join(meta['derives'])})]")
|
|
1144
1147
|
lines.append(f"{meta['vis']} struct {rust_name} {{")
|
|
1148
|
+
extras = RUST_EXTRA_FIELDS.get(rust_name, ())
|
|
1149
|
+
# #1939: an extras entry WINS over the mechanical walk when the spec also
|
|
1150
|
+
# declares that property. `RUST_EXTRA_FIELDS` exists for the wire-only
|
|
1151
|
+
# `<field>_truncated`/`<field>_len` flags `board_wire.py` stamps on, and
|
|
1152
|
+
# `/openapi.json` now declares them too (it always should have — they were
|
|
1153
|
+
# just rare enough on the wire that nothing noticed). Without this the walk
|
|
1154
|
+
# and the table would BOTH emit them: duplicate struct fields, and the
|
|
1155
|
+
# auto-derived `body_len: i64` would shadow the hand-written
|
|
1156
|
+
# `Option<i64>` that `issue_body_fetch_target`'s `len?` gate depends on.
|
|
1157
|
+
extra_names = {f.name for f in extras}
|
|
1145
1158
|
for python_name, field_schema in properties.items():
|
|
1159
|
+
if python_name in extra_names:
|
|
1160
|
+
continue
|
|
1146
1161
|
field = overrides.get(python_name) or _rust_auto_field(python_name, field_schema)
|
|
1147
1162
|
lines.extend(_render_rust_field(field))
|
|
1148
|
-
for field in
|
|
1163
|
+
for field in extras:
|
|
1149
1164
|
lines.extend(_render_rust_field(field))
|
|
1150
1165
|
lines.append("}")
|
|
1151
1166
|
return "\n".join(lines)
|
|
@@ -975,16 +975,17 @@ def test_board_wire_bounds_assignment_text_fields(app_client: TestClient) -> Non
|
|
|
975
975
|
|
|
976
976
|
|
|
977
977
|
def test_board_wire_bounds_issue_bodies(app_client: TestClient) -> None:
|
|
978
|
-
"""
|
|
979
|
-
|
|
980
|
-
|
|
978
|
+
"""#1939: an open non-epic body leaves the collection wire entirely — it
|
|
979
|
+
is 1.44 MB of display material the Issue tabs hydrate lazily (#2497) —
|
|
980
|
+
and is flagged so a client knows to fetch the detail read."""
|
|
981
|
+
from coord.board_wire import TRUNCATION_NOTICE
|
|
981
982
|
|
|
982
983
|
board = app_client.get("/board").json()
|
|
983
984
|
issue = next(i for i in board["issues"] if i["number"] == 42)
|
|
984
|
-
# 9 KB body
|
|
985
|
-
assert issue["body"] ==
|
|
986
|
-
assert "body_truncated"
|
|
987
|
-
assert
|
|
985
|
+
# 9 KB body: no longer served on the collection wire at all.
|
|
986
|
+
assert issue["body"] == TRUNCATION_NOTICE
|
|
987
|
+
assert issue["body_truncated"] is True
|
|
988
|
+
assert issue["body_len"] == 9000
|
|
988
989
|
|
|
989
990
|
|
|
990
991
|
def test_board_wire_short_fields_untouched(
|
|
@@ -18,6 +18,7 @@ flag so a client can tell it received a trimmed board.
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
20
|
import json
|
|
21
|
+
import re
|
|
21
22
|
import sqlite3
|
|
22
23
|
import time
|
|
23
24
|
from pathlib import Path
|
|
@@ -142,15 +143,104 @@ def test_bound_issue_row_drops_closed_issue_body() -> None:
|
|
|
142
143
|
assert len(row["body"]) < 200 # notice text only — no prefix survives
|
|
143
144
|
|
|
144
145
|
|
|
145
|
-
def
|
|
146
|
-
"""
|
|
147
|
-
|
|
148
|
-
|
|
146
|
+
def test_bound_issue_row_drops_open_non_epic_issue_body() -> None:
|
|
147
|
+
"""#1939: an OPEN non-epic body is display material the Issue tabs
|
|
148
|
+
hydrate lazily (#2497), so it leaves the collection wire too — the
|
|
149
|
+
#1337 DOCUMENT_CHARS prefix truncated no real issue (p99 ≈ 9 KB against
|
|
150
|
+
a 16 KB cap) and therefore saved nothing."""
|
|
151
|
+
body = "x" * 9000
|
|
152
|
+
row = {"state": "open", "labels": ["bug"], "body": body}
|
|
153
|
+
bound_issue_row(row)
|
|
154
|
+
assert row["body_truncated"] is True
|
|
155
|
+
assert row["body_len"] == 9000
|
|
156
|
+
assert len(row["body"]) < 200 # notice text only
|
|
157
|
+
assert "x" * 100 not in row["body"]
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def test_bound_issue_row_open_body_keeps_the_allowed_globs_line() -> None:
|
|
161
|
+
"""#1939: `acceptance_for_path_arg` parses `**Allowed:**` out of an open
|
|
162
|
+
issue's body SYNCHRONOUSLY while handling a Pipeline right-click
|
|
163
|
+
dispatch — there is no user action it could wait for a detail fetch
|
|
164
|
+
behind — so those lines survive the cut while the prose does not."""
|
|
165
|
+
body = (
|
|
166
|
+
"Some long prose that nothing parses.\n" * 200
|
|
167
|
+
+ "## Files\n"
|
|
168
|
+
+ "- **Allowed:** `coord/board_wire.py`, `tests/test_board_wire.py`\n"
|
|
169
|
+
+ "- **Forbidden:** docs/README.\n"
|
|
170
|
+
+ "More prose.\n" * 200
|
|
171
|
+
)
|
|
172
|
+
row = {"state": "open", "labels": ["bug"], "body": body}
|
|
173
|
+
bound_issue_row(row)
|
|
174
|
+
|
|
175
|
+
assert row["body_truncated"] is True
|
|
176
|
+
assert row["body_len"] == len(body)
|
|
177
|
+
assert "**Allowed:** `coord/board_wire.py`, `tests/test_board_wire.py`" in row["body"]
|
|
178
|
+
assert "Some long prose" not in row["body"]
|
|
179
|
+
assert "Forbidden" not in row["body"]
|
|
180
|
+
assert len(row["body"]) < len(body) // 10
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def test_bound_issue_row_open_body_of_only_globs_is_left_alone() -> None:
|
|
184
|
+
"""Additive-only rule: when the residue isn't actually smaller than the
|
|
185
|
+
original, nothing is cut and no flag is stamped — an old client sees an
|
|
186
|
+
unchanged shape, same as the width caps."""
|
|
187
|
+
body = "- **Allowed:** `coord/**`\n"
|
|
188
|
+
row = {"state": "open", "labels": ["bug"], "body": body}
|
|
189
|
+
bound_issue_row(row)
|
|
190
|
+
assert row["body"] == body
|
|
191
|
+
assert "body_truncated" not in row
|
|
192
|
+
|
|
149
193
|
|
|
150
|
-
|
|
194
|
+
def test_bound_issue_row_short_open_body_still_dropped() -> None:
|
|
195
|
+
"""A *short* open body is still not free: 490 open non-epic issues at a
|
|
196
|
+
~2.9 KB mean were 1.44 MB per uncached poll, per client. The cut is
|
|
197
|
+
unconditional, not size-gated."""
|
|
198
|
+
body = "a short but entirely unrendered issue description\n" * 5
|
|
199
|
+
row = {"state": "open", "labels": ["bug"], "body": body}
|
|
151
200
|
bound_issue_row(row)
|
|
152
201
|
assert row["body_truncated"] is True
|
|
153
|
-
assert
|
|
202
|
+
assert "unrendered" not in row["body"]
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def test_bound_issue_row_empty_open_body_untouched() -> None:
|
|
206
|
+
row = {"state": "open", "labels": ["bug"], "body": ""}
|
|
207
|
+
bound_issue_row(row)
|
|
208
|
+
assert row["body"] == ""
|
|
209
|
+
assert "body_truncated" not in row
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def test_bound_issue_row_open_epic_body_still_inline() -> None:
|
|
213
|
+
"""#1939 must not reach the Milestone DAG: `milestone_dag.rs` parses
|
|
214
|
+
`## Work order` client-side out of the epic body with NO extra
|
|
215
|
+
round-trip, so epics stay exempt (48 open epics, 0.24 MB — bounded)."""
|
|
216
|
+
body = "## Work order\n" + "x" * 20000 + "\n- [ ] #4243 {after: #4242}\n"
|
|
217
|
+
row = {"state": "open", "labels": ["epic", "coord"], "body": body}
|
|
218
|
+
bound_issue_row(row)
|
|
219
|
+
assert row["body"] == body
|
|
220
|
+
assert "body_truncated" not in row
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
def test_allowed_glob_marker_matches_the_rust_parser() -> None:
|
|
224
|
+
"""Cross-language guard (#1939), same posture as coord/board_bool_guard.py:
|
|
225
|
+
`ALLOWED_GLOB_MARKER` decides what survives the body cut on the *server*,
|
|
226
|
+
but the consumer that needs it is `parse_allowed_globs_from_issue_body`
|
|
227
|
+
in the Rust TUI. If someone renames the marker on one side only, the
|
|
228
|
+
residue silently stops carrying what the client parses — so assert the
|
|
229
|
+
two spellings are still the same string.
|
|
230
|
+
"""
|
|
231
|
+
from coord.board_wire import ALLOWED_GLOB_MARKER
|
|
232
|
+
|
|
233
|
+
src = Path(__file__).resolve().parents[1] / "tui" / "src" / "app" / "pipeline.rs"
|
|
234
|
+
if not src.exists(): # pragma: no cover — coord installed without the TUI tree
|
|
235
|
+
pytest.skip("tui/src/app/pipeline.rs not present in this checkout")
|
|
236
|
+
text = src.read_text(encoding="utf-8")
|
|
237
|
+
marker = re.search(r'const MARKER: &str = "([^"]+)";', text)
|
|
238
|
+
assert marker is not None, (
|
|
239
|
+
"parse_allowed_globs_from_issue_body's MARKER const is gone or was "
|
|
240
|
+
"reshaped — re-check what the Rust side parses before trusting "
|
|
241
|
+
"_machine_readable_residue"
|
|
242
|
+
)
|
|
243
|
+
assert marker.group(1) == ALLOWED_GLOB_MARKER
|
|
154
244
|
|
|
155
245
|
|
|
156
246
|
def test_bound_issue_row_closed_epic_still_exempt() -> None:
|
|
@@ -459,6 +459,42 @@ def test_a_busy_daemon_host_defers_the_whole_run(
|
|
|
459
459
|
assert pending.reason == "propagate"
|
|
460
460
|
|
|
461
461
|
|
|
462
|
+
def test_a_busy_daemon_dry_run_defers_without_writing_the_marker(
|
|
463
|
+
valid_config_path, state_dir, no_network, monkeypatch
|
|
464
|
+
):
|
|
465
|
+
"""#2869: `--dry-run` promises to "print the window verdict and the roll
|
|
466
|
+
plan; change nothing" — but the daemon-busy defer branch above called
|
|
467
|
+
`_ensure_roll_pending_marker` unconditionally, so a purely read-only
|
|
468
|
+
`coord release propagate --dry-run` against a busy daemon armed the
|
|
469
|
+
REAL #2587 roll-pending marker, freezing the whole drive queue (capacity
|
|
470
|
+
forced to 0) even though nothing was supposed to change. This asserts
|
|
471
|
+
the marker file stays absent and the output names what would have been
|
|
472
|
+
set instead, matching `_fire_pending_roll`'s and `_apply_cordons`'s
|
|
473
|
+
existing dry-run wording conventions."""
|
|
474
|
+
monkeypatch.setattr(
|
|
475
|
+
release_cmd, "_fetch_board",
|
|
476
|
+
lambda: ({"assignments": [{"machine_name": "server", "issue_number": 9,
|
|
477
|
+
"status": "RUNNING"}]}, None),
|
|
478
|
+
)
|
|
479
|
+
monkeypatch.setattr(
|
|
480
|
+
release_cmd, "_roll_python",
|
|
481
|
+
lambda *a, **k: pytest.fail("a busy daemon must roll nothing, anywhere"),
|
|
482
|
+
)
|
|
483
|
+
_stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
484
|
+
daemon="server")
|
|
485
|
+
result = CliRunner().invoke(
|
|
486
|
+
main,
|
|
487
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
488
|
+
"--target", "0.4.111", "--dry-run"],
|
|
489
|
+
)
|
|
490
|
+
assert result.exit_code == 0, result.output
|
|
491
|
+
assert dq_cmd.read_roll_pending() is None, (
|
|
492
|
+
"--dry-run must never write the real #2587 roll-pending marker"
|
|
493
|
+
)
|
|
494
|
+
assert "would set a roll-pending marker" in result.output
|
|
495
|
+
assert "0.4.111" in result.output
|
|
496
|
+
|
|
497
|
+
|
|
462
498
|
def test_a_second_busy_daemon_deferral_does_not_re_arm_the_marker(
|
|
463
499
|
valid_config_path, state_dir, no_network, monkeypatch
|
|
464
500
|
):
|